Вот как я вижу разницу в соответствии с моими текущими знаниями в Котлине.
Первых один:
var myObject1 : Any? = null
Здесь myObject1
это свойство, обнуляемые. Это означает, что вы можете назначить ему null
.
Второй один:
lateinit var myObject2 : Any
Здесь myObject2
является ненулевым собственностью. Это означает, что вы не можете назначить ему null
. Обычно, если свойство не равно null, вы должны инициализировать его в объявлении. Но добавление ключевого слова lateinit
позволяет отложить инициализацию. Если вы попытаетесь получить доступ к свойству lateinit
до его инициализации, вы получите исключение.
Вкратце основное отличие состоит в том, что myObject1
является нулевым, а myObject2
- это не пустое. Ключевое слово lateinit
предоставляет вам механизм удобства, позволяющий инициализировать свойство non-null позднее, а не инициализировать его при объявлении.
Для получения дополнительной информации проверьте this.