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

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

object DataHolder { val time : MutableList<Long> init { time = arrayListOf() } ... 

和这个

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

一般而言,在赋值或init块中的属性初始化之间完全没有区别。 您可以使用javap工具检查生成的字节码,以发现在这两种情况下模数行数完全相同。

然而在你的例子中,甚至从源代码的角度来看也是有区别的:在第一个采样time的类型被声明为MutableList<Long> ,但是在第二个采样中它的类型没有明确指定,所以它的类型分配给它的表达式。 arrayListOf<T>返回ArrayList<T> ,所以第二种情况下的time类型是ArrayList<Long> 。 如果在第二个例子MutableList<Long>指定为time类型,那么实际上生成的输出将是相同的。