Котлин-латейнит VS любой? = недействительный
в Kotlin существует два метода объявления переменной внутри объекта,которая может быть null и создается после создания объекта.
var myObject : Any? = null
или
var lateinit myObject : Any
Я смущен тем, почему ключевое слово lateinit необходимо, если мы можем просто сделать var nullable и назначить его позже. Каковы плюсы и минусы каждого метода и в какой ситуации следует использовать каждый из них?
3 ответов
вот как я вижу разницу в соответствии с моими текущими знаниями в Котлине.
первый:
var myObject1 : Any? = null
здесь myObject1
является свойством, которое nullable. Это означает, что вы можете назначить null
к нему.
второй:
lateinit var myObject2 : Any
здесь myObject2
является ненулевым свойством. Это означает, что вы не можете назначить null
к нему. Обычно, если свойство не равно null, вы должны инициализировать его в объявлении. Но добавление ключевого слова lateinit
позволяет отложить инициализацию. Если вы попытаетесь получить доступ к lateinit
свойство перед его инициализацией вы получаете исключение.
короче говоря, главное отличие в том, что myObject1
является nullable и myObject2
непустая. Ключевое слово lateinit
предоставить Вам удобный механизм, позволяющий инициализировать ненулевое свойство позже, а не инициализировать его в объявлении.
более подробная информация этой.
lateinit
ключевое слово используется в поле для avoid
null проверяет при ссылке на поле внутри вашего объекта. Ключевое слово в основном используется при использовании инъекции зависимостей для инициализации переменной или инициализации переменной в методе установки модульного теста
?
используется в поле, когда поле будет инициализировано позже в вашей программе либо сеттером, либо внутри метода объекта, это должно заставить вас проверить значение null или использовать null безопасность (?.
) при ссылке на поле
если ваша собственность не должна быть null
, но просто не устанавливается после некоторого момента в будущем, безопаснее объявить его с lateinit
ключевое слово. Это гарантирует, что если вы получите доступ к нему до его установки, вы получите исключение, объясняющее именно это.
традиционный способ Java-это бросить общий NullPointerException
без каких-либо объяснений об этом. Если вы сами написали код, у вас может быть ключ, но если кто-то еще поймет ошибку, это не будет ясно почему что конкретная переменная null
.