2016-02-29 6 views
12

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

var myObject : Any? = null 

или

var lateinit myObject : Any 

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

ответ

13

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

Первых один:

var myObject1 : Any? = null 

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

Второй один:

lateinit var myObject2 : Any 

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

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

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

4

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

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

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^