是否可以在Kotlin类中的 init
块之前初始化 companion object
?如果是这样,怎么样?如果没有,有没有办法完成同样的事情 .
我有以下场景,
class A(val iname: String) {
init {
foo.add(this)
}
companion object B {
@JvmField val STATIC = A("hi")
@JvmField val foo = mutableListOf<A>()
}
fun printAllStatics() {
for (a in foo) {
print(a.iname)
}
}
}
并且调用 printAllStatics
会导致空指针异常 .
2 回答
只需更改行的顺序:
在
A
中使用foo
之前,它尚未初始化 .属性初始值设定项和
init
块的执行顺序与它们放置在类/对象体中的顺序完全相同 . 这是一个例子:它将打印1 2 3 4 .
因此,在您的情况下,交换
companion object
中的两个声明就足够了: