Котлин - латинит В.С. Любой? = ноль

В Kotlin, по-видимому, существует два метода объявления переменной внутри объекта, которая может быть нулевой и создаваться после создания объекта.

var myObject : Any? = null

или

var lateinit myObject : Any  

Я не совсем понимаю, зачем нужно ключевое слово lateinit, если мы можем просто сделать переменную Nullable и назначить ее позже. Каковы плюсы и минусы каждого метода и в какой ситуации его следует использовать?

Ответ 1

Вот как я вижу разницу в соответствии с моими нынешними знаниями в Котлине.

Первый:

var myObject1 : Any? = null

Здесь myObject1 это свойство, которое можно обнулять. Это означает, что вы можете назначить null ему.

Второй:

lateinit var myObject2 : Any

Здесь myObject2 - ненулевое свойство. Это означает, что вы не можете назначить null ему. Обычно, если свойство ненулевое, вы должны инициализировать его в объявлении. Но добавление ключевого слова lateinit позволяет отложить инициализацию. Если вы попытаетесь получить доступ к свойству lateinit до его инициализации, вы получите исключение.

Короче говоря, основное отличие состоит в том, что myObject1 является обнуляемым, а myObject2 не ненулевым. Ключевое слово lateinit предоставляет удобный механизм, позволяющий инициализировать ненулевое свойство позднее, а не инициализировать его в объявлении.

Для получения дополнительной информации проверьте это.

Ответ 2

Ключевое слово lateinit используется в поле для нулевых проверок avoid при обращении к полю внутри вашего объекта. Ключевое слово в основном используется, когда вы используете внедрение зависимостей для инициализации переменной или инициализации переменной в методе настройки модульного теста

? используется для поля, когда поле будет позже инициализировано в вашей программе либо установщиком, либо внутри метода объекта, это для того, чтобы заставить вас проверять на ноль или использовать нулевую безопасность (?.), когда ссылаясь на поле

Ответ 3

Если ваше свойство не должно быть null, но просто не задано после некоторого момента в будущем, безопаснее объявить его с ключевым словом lateinit. Это гарантирует, что, если вы получите доступ к нему до его установки, вы получите исключение, объясняющее именно это.

Традиционный способ Java состоит в том, чтобы генерировать универсальный NullPointerException без объяснения причин. Если вы написали код самостоятельно, у вас может быть подсказка, но если кто-то поймает ошибку, не будет понятно, почему эта переменная null.