科特林对象。哪种初始化方式是正确的?

Kotlin object. Which way of initialization is right?

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

object  DataHolder {
val time : MutableList<Long>

init {
    time = arrayListOf()
} ...

还有这个

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

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

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