Выбор ответа Middle Null-safety обновлено

Платформенный тип String!

Вопрос

Метод Java без аннотаций возвращает String. Какой тип увидит Kotlin?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Платформенный тип String!: за null отвечает разработчик. Kotlin не знает, может ли Java-метод вернуть null, и не хочет заставлять проверять каждое значение.

Варианты ответа

  1. String, и компилятор гарантирует, что там не null
  2. Платформенный тип String!: за null отвечает разработчикправильный ответ
  3. String?, и каждое обращение требует проверки на null
  4. Any?, потому что Kotlin не доверяет типам из Java

Разбор

Kotlin не знает, может ли Java-метод вернуть null, и не хочет заставлять проверять каждое значение. Поэтому тип платформенный: его можно присвоить и в String, и в String?. Если присвоить в String, а там null, будет NPE прямо в этом месте. Если Java-код размечен @Nullable/@NonNull (AndroidX, JetBrains, JSpecify), Kotlin увидит обычные типы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.