kotlin - 是否可以为 Kotlin 覆盖 ENUM 的名称?
问题描述
我的枚举如下
enum class ImagesType(val descriptor: String) {
BIGGER("Bigger Image - Fall"),
SMALLER("Smaller Image - Lion"),
TALLER("Taller Image - Tree"),
LONGER("longer Image - Bridge")
}
- 当我
println(ImagesType.BIGGER)
会打印BIGGER
- 当我
val x = ImagesType.valueOf("SMALLER")
,它会得到val x = SMALLER
这是因为name
与枚举字符相同。我希望用 覆盖name
,description
以下将是正确的
- 当我
println(ImagesType.BIGGER)
会打印Bigger Image - Fall
- 当我
val x = ImagesType.valueOf("Smaller Image - Lion")
,它会得到val x = SMALLER
我试过
enum class ImagesType(override val name: String) {
BIGGER("Bigger Image - Fall"),
SMALLER("Smaller Image - Lion"),
TALLER("Taller Image - Tree"),
LONGER("longer Image - Bridge")
}
但它没有说明这name
是最终的。
解决方案
我用方式得到我想要的。
enum class ImagesType(val descriptor: String) {
BIGGER("Bigger Image - Fall"),
SMALLER("Smaller Image - Lion"),
TALLER("Taller Image - Tree"),
LONGER("longer Image - Bridge");
override fun toString(): String {
return descriptor
}
companion object {
fun getEnum(value: String): ImagesType {
return values().first { it.descriptor == value }
}
}
}
所以它得到了我需要的结果
- 当我
println(ImagesType.BIGGER)
会打印Bigger Image - Fall
- 当我 val
x = ImagesType.getEnum("Smaller Image - Lion")
,它会得到 valx = SMALLER
valueOf
我通过将其替换为覆盖的一种解决方法getEnum
。看起来valueOf
无法覆盖。
推荐阅读
- java - 继承和泛型 Java 问题观察者
- assembly - 火星米普斯组装
- php - 选择多个表时 PHP 准备好的语句返回 null
- firebase - Firebase 规则:此规则之间的差异
- java - 如何在网格中水平和垂直多次打印相同的输出?
- database - 如何在 PostgreSQL 中使用 CREATE STATISTIC 对象?
- angular - Angular NgPrime 表获取未选中复选框的所有数据
- processing - 处理,如何设置最小音量?
- javascript - 读取excel文件并更新网页信息?[HTML]
- node.js - 读取太多数据时 Firebase 卡住