Выбор ответа Junior Null-safety спрашивают часто обновлено

Ограничения lateinit

Вопрос

Какое объявление НЕ скомпилируется?

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

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

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

Коротко

Правильный ответ: lateinit var count: Int. lateinit нельзя использовать с примитивными типами (Int, Long, Boolean и т.д.), потому что признаком «не инициализировано» служит null в поле, а у примитива его нет.

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

  1. lateinit var adapter: UserAdapter
  2. lateinit var name: String
  3. lateinit var count: Intправильный ответ
  4. private lateinit var repo: Repository

Разбор

lateinit нельзя использовать с примитивными типами (Int, Long, Boolean и т.д.), потому что признаком «не инициализировано» служит null в поле, а у примитива его нет. Для чисел используют Delegates.notNull<Int>() или значение по умолчанию. Также lateinit только для var и только для non-null типов. Остальные три варианта корректны, модификатор видимости не мешает.

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

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