2015-11-14 2 views
0

Есть ли разница между инициализацией объекта? Будет ли поле времени иметь другое поведение или оно такое же, как в Java (объявление разделения и инициализация)? БлагодаряKotlin объект. Какой способ инициализации прав?

object DataHolder { 
val time : MutableList<Long> 

init { 
    time = arrayListOf() 
} ... 

и это

object DataHolder { 
val time = arrayListOf<Long>() .... 

ответ

5

Вообще нет никакой разницы между инициализацией собственности в присвоении или в init блоке. Вы можете проверить сгенерированный байт-код с помощью инструмента javap, чтобы узнать, что он одинаковый в обоих случаях, по номерам строк по модулю.

В вашем примере, однако, существует разница даже с точки зрения исходного кода: в первом примере тип time объявлен как MutableList<Long>, но во втором примере его тип не указан явно, поэтому он имеет тип присваиваемого ему выражения. arrayListOf<T> возвращает ArrayList<T>, поэтому time тип во втором случае: ArrayList<Long>. Если вы укажете MutableList<Long> как тип time во втором примере, то действительно, произведенные выходы будут одинаковыми.

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