Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Kotlin-是否可以在类中的init块之前初始化伴随对象?_Oop_Static_Kotlin_Companion Object_Static Initializer - Fatal编程技术网

Oop Kotlin-是否可以在类中的init块之前初始化伴随对象?

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

可以在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 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")
}