如何强制立即枚举枚举值?
默认情况下,在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
使用一些现有的注释,或创建一个新的注释,或其他一些想法,都可以。 :)
JVM仅在首次访问时加载类。这不仅适用于kotlin,而且适用于Java。对于Java,我们有方法可以在main之前初始化类,例如,静态初始化程序块或Class.forName
。同样,您可以在Kotlin中使用静态初始化程序块。
object Temp {
init {
A.ONE
}
@JvmStatic fun main(args: Array<String>) {
println("main")
println(A.ONE)
}
}