以下枚举定义有效。是否可以访问“内部属性”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)
您必须在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
对象,因此它似乎不是存储状态信息的正确位置。
归档时间: |
|
查看次数: |
6101 次 |
最近记录: |