Oop Kotlin-是否可以在类中的init块之前初始化伴随对象?
可以在Kotlin类中的Oop Kotlin-是否可以在类中的init块之前初始化伴随对象?,oop,static,kotlin,companion-object,static-initializer,Oop,Static,Kotlin,Companion Object,Static Initializer,可以在Kotlin类中的init块之前初始化伴随对象吗?如果是,怎么做?如果没有,有没有办法完成同样的事情 我有下面的场景 class A(val iname: String) { init { foo.add(this) } companion object B { @JvmField val STATIC = A("hi") @JvmField val foo = mutableListOf<A>() } fun printA
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)
}
}
}
A类(val-iname:String){
初始化{
foo.add(这个)
}
伴星B{
@JvmField val STATIC=A(“hi”)
@JvmField val foo=mutableListOf()
}
有趣的printAllStatics(){
对于(一个在foo中){
印刷品(在美国)
}
}
}
调用printAllStatics
会导致空指针异常。只需更改行的顺序:
@JvmField val foo = mutableListOf<A>()
@JvmField val STATIC = A("hi")
@JvmField val foo=mutableListOf()
@JvmField val STATIC=A(“hi”)
在A
中使用foo
之前,未对其进行初始化。属性初始值设定项和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")
}
}
在我看来,这是你想要的。你的错误是什么?对不起,我的MWE没有显示实际问题。我的错误
companion object B {
@JvmField val foo = mutableListOf<A>()
@JvmField val STATIC = A("hi")
}