Котлин - латинит В.С. Любой? = ноль
В 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
.