Fil*_*erg 11 oop static static-initializer kotlin companion-object
是否可以在Kotlin类中初始化块companion object之前init?如果是这样,怎么样?如果没有,有没有办法完成同样的事情.
我有以下场景,
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且调用printAllStatics导致空指针异常.
hot*_*key 10
属性初始值设定项和init块的执行顺序与它们放置在类/对象体中的顺序完全相同.这是一个例子:
companion object B {
init {
print("1 ")
}
@JvmField val foo = mutableListOf<A>().apply { print("2 ") }
@JvmField val bar = mutableListOf<A>().apply { print("3 ") }
init {
print("4")
}
}
Run Code Online (Sandbox Code Playgroud)
它会打印出来1 2 3 4.
所以,在你的情况下,交换两个声明companion object就足够了:
companion object B {
@JvmField val foo = mutableListOf<A>()
@JvmField val STATIC = A("hi")
}
Run Code Online (Sandbox Code Playgroud)