Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Kotlin 如何强制立即实例化枚举值?_Kotlin_Enums_Jvm_Singleton_Static Initialization - Fatal编程技术网

Kotlin 如何强制立即实例化枚举值?

Kotlin 如何强制立即实例化枚举值?,kotlin,enums,jvm,singleton,static-initialization,Kotlin,Enums,Jvm,Singleton,Static Initialization,如何强制立即实例化枚举值 默认情况下,在Kotlin中,枚举是在第一次访问时实例化的(如objects/singleton),即下面的最小示例 class-Foo fun create(msg:String)=Foo()。还有{println(“$msg”)} 枚举类别A(val foo:foo){ 一(创建(“1”)), 二(创建(“2”)) } 枚举类B(val foo:foo){ 三(创建(“3”)), 四(创建(“4”)) } 主要内容(){ println(“主”) println(A

如何强制立即实例化枚举值

默认情况下,在Kotlin中,枚举是在第一次访问时实例化的(如
object
s/singleton),即下面的最小示例

class-Foo
fun create(msg:String)=Foo()。还有{println(“$msg”)}
枚举类别A(val foo:foo){
一(创建(“1”)),
二(创建(“2”))
}
枚举类B(val foo:foo){
三(创建(“3”)),
四(创建(“4”))
}
主要内容(){
println(“主”)
println(A.ONE)
}
产出:

main
1
2
ONE
是否可以强制在
main
之前直接/静态实例化枚举,以便输出如下

1
2
3
4
main
ONE
当然,我可以把类似于
val ignore=listOf(A.ONE,B.THREE)
的东西放在某个地方,但我希望避免这种手动重复


也许有一种方法可以使用一些现有的注释,或者创建一个新的注释,或者其他方法?:)

JVM仅在第一次访问时加载类。这不仅适用于kotlin,也适用于Java。对于Java,我们有在main之前初始化类的方法,例如,静态初始值设定项块,或
class.forName
。类似地,您可以在Kotlin中使用静态初始值设定项块

object Temp {
    init {
        A.ONE
    }

    @JvmStatic fun main(args: Array<String>) {
        println("main")
        println(A.ONE)
    }
}
对象温度{
初始化{
一
}
@JvmStatic fun main(args:Array){
println(“主”)
println(A.ONE)
}
}

谢谢。但是我希望避免像
init
块中那样的手动重复,因为很容易忘记其中的一个枚举。我已相应地编辑了我的问题。使用库(例如反射)扫描应用程序,提取所有枚举,并在启动逻辑之前加载它们。或者只是重新思考软件设计。依赖于类初始化中应用的副作用是错误的做法。@Holger是的,我已经在实际应用中采用了不同的方法。但现在我很好奇