Выбор ответа Middle Делегаты обновлено
Delegates.notNull или lateinit
Вопрос
Чем var port: Int by Delegates.notNull() отличается от lateinit var?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: notNull работает с примитивами, но без isInitialized. lateinit нельзя использовать с примитивами (Int, Boolean), а Delegates.notNull() можно: он хранит значение в объекте-делегате.
Варианты ответа
- Ничем, это одна реализация с разным синтаксисом
notNullработает с примитивами, но безisInitializedправильный ответnotNullразрешает хранитьnullдо первого чтенияlateinitработает только с примитивами, аnotNullс любыми
Разбор
lateinit нельзя использовать с примитивами (Int, Boolean), а Delegates.notNull() можно: он хранит значение в объекте-делегате. Зато проверки ::port.isInitialized у него нет, а обращение до присваивания бросит IllegalStateException. null не допускают оба. lateinit наоборот только для non-null ссылочных типов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.