如何强制立即枚举枚举值?

问题描述 投票:1回答:1

如何强制立即枚举枚举值?

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

class Foo

fun create(msg: String) = Foo().also { println("$msg") }

enum class A(val foo: Foo) {
    ONE(create("1")),
    TWO(create("2"))
}

enum class B(val foo: Foo) {
    THREE(create("3")),
    FOUR(create("4"))
}

fun main() {
    println("main")
    println(A.ONE)
}

输出:

main
1
2
ONE

是否可以强制在main之前直接/静态地枚举枚举,以使输出如下所示?

1
2
3
4
main
ONE

使用一些现有的注释,或创建一个新的注释,或其他一些想法,都可以。 :)

kotlin enums jvm singleton static-initialization
1个回答
0
投票

JVM仅在首次访问时加载类。这不仅适用于kotlin,而且适用于Java。对于Java,我们有方法可以在main之前初始化类,例如,静态初始化程序块或Class.forName。同样,您可以在Kotlin中使用静态初始化程序块。

object Temp {
    init {
        A.ONE
    }

    @JvmStatic fun main(args: Array<String>) {
        println("main")
        println(A.ONE)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.