枚举惰性属性

问题描述 投票:0回答:2

我想知道 kotlin 是如何处理枚举属性的。如果我们有一个具有以下结构的枚举:

enum class MyEnun(var sampleObject: MyObjectType){
   ONE(MyObjectType(blabla)),
   TWO(MyObjectType(blabla))
}

这两个 MyObjectType 实例是以惰性方式创建的,还是相反,它们将在创建枚举时创建?

enums kotlin
2个回答
5
投票

所有实例都是同时创建的。

enum class Foo(input: String) {

    ONE("one"),
    TWO("two");

    init {
        println("Received $input")
    }
}

fun main(args: Array<String>) {
    Foo.ONE
}

当我运行时,我得到以下结果:

Received one
Received two

如果它们是惰性创建的,我希望只打印“已收到”。


0
投票

问题
哪个是真的?

  1. 枚举类中的常量是以惰性方式创建的。
  2. 枚举类中的常量是立即创建的(当创建枚举类时)。

回答

  • 2 是正确的。 (参考上面Todd的回答。)
  • 1 部分正确。
    • Java程序在JVMJava虚拟机上执行。
    • 第一次引用/实例化类时,JVM 会加载类级信息。
    • 上述过程包含静态成员初始化。
    • 枚举类中的常量也属于静态成员。
    • 因此,枚举类中的常量会被延迟初始化(当第一次引用枚举类中的任何常量时)。
© www.soinside.com 2019 - 2024. All rights reserved.