gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:50:49 29 4
gpt4 key购买 nike

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

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

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)
}
}

关于kotlin - 如何强制立即实例化枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62014319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com