对象的初始化有什么区别吗? 时间字段会有不同的行为,还是与Java(拆分声明和初始化)中的相同?感谢
object DataHolder {
val time : MutableList<Long>
init {
time = arrayListOf()
} ...
和这个
object DataHolder {
val time = arrayListOf<Long>() ....
答案 0 :(得分:6)
通常,在赋值中的属性初始化或init
块中没有任何区别。您可以使用javap
工具检查生成的字节码,以确定它在两种情况下都是完全相同的,模数行。
在您的示例中,即使从源代码的角度来看也存在差异:在第一个示例中time
的类型被声明为MutableList<Long>
,但在第二个示例中,其类型未指定显式,因此它具有分配给它的表达式的类型。 arrayListOf<T>
会返回ArrayList<T>
,因此time
在第二种情况下的类型为ArrayList<Long>
。如果在第二个示例中将MutableList<Long>
指定为time
的类型,那么生成的输出确实是相同的。