Kotlin对象。哪种初始化方式是对的?

时间:2015-11-14 15:27:54

标签: kotlin

对象的初始化有什么区别吗? 时间字段会有不同的行为,还是与Java(拆分声明和初始化)中的相同?感谢

object  DataHolder {
val time : MutableList<Long>

init {
    time = arrayListOf()
} ...

和这个

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

1 个答案:

答案 0 :(得分:6)

通常,在赋值中的属性初始化或init块中没有任何区别。您可以使用javap工具检查生成的字节码,以确定它在两种情况下都是完全相同的,模数行。

在您的示例中,即使从源代码的角度来看也存在差异:在第一个示例中time的类型被声明为MutableList<Long>,但在第二个示例中,其类型未指定显式,因此它具有分配给它的表达式的类型。 arrayListOf<T>会返回ArrayList<T>,因此time在第二种情况下的类型为ArrayList<Long>。如果在第二个示例中将MutableList<Long>指定为time的类型,那么生成的输出确实是相同的。