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



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

默认情况下,在 Kotlin 中,枚举在首次访问时实例化(如objects/singleton(,即以下最小示例

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

当然,我可以把类似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)
}
}

最新更新