如何在 Kotlin 中访问 Enum 属性和函数

Jör*_*mer 5 enums kotlin

以下枚举定义有效。是否可以访问“内部属性”auditData 或函数auditor?

enum class GWGStatus {
    UNCHECKED,
    CHECKED {
        lateinit var auditDate: Date
        fun auditor() : String = "Peter"
    }
}

GWGStatus.CHECKED.??? (does not work)
Run Code Online (Sandbox Code Playgroud)

Rob*_*sen 3

您必须在enum类型本身中声明变量和函数,然后在enum实例中覆盖它们。

不幸的是,由于并非所有enum实例都实现该功能,因此您无法实现该功能abstract,并且必须提供默认实现:

import java.util.*

enum class GWGStatus {
    UNCHECKED,
    CHECKED {
        override lateinit var auditDate: Date
        override fun auditor(): String = "Peter"
    };

    open lateinit var auditDate: Date
    open fun auditor(): String = ""
}

fun main(vararg args: String) {
    GWGStatus.CHECKED.auditDate = Date()

    println(GWGStatus.CHECKED.auditDate)
    println(GWGStatus.CHECKED.auditor())
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这种enum用法感觉很奇怪。您将状态数据存储在旨在成为常量对象的对象中。内存中永远只有一个GWGStatus.CHECKED对象,因此它似乎不是存储状态信息的正确位置。