【发布时间】:2019-08-30 18:41:26
【问题描述】:
我知道在枚举类上调用 .values() 会给出枚举案例的数组。但是它不适用于通用枚举类。为什么会这样,我该怎么做才能获得相同的功能?
class EnumEditActivity<E: Enum<E>>() {
var value: E? = null
var allValues: Array<E> = E.values()
}
如果我在普通枚举上调用 values(),它可以正常工作:
enum class Gender {
male, female
}
for (value in Gender.values()) {
println(value.name)
}
打印:
male
female
一些答案建议这样做:
enum class SomeEnum {
one, two
}
class EnumEditActivity<E: SomeEnum>() {
var value: E? = null
val values = listCases<SomeEnum>()
inline fun <reified E: SomeEnum> listCases() = (E::class.java).enumConstants.toList()
}
这是行不通的,因为它不是动态的:它总是只会获取 SomeEnum 的情况,因此没有必要使用泛型类。除了 SomeEnum 之外,您不能将任何其他枚举传递给该类,因为一个枚举不能从另一个枚举继承。
我认为这在 Kotlin 中是不可能的。我现在只是定义类,因此它需要您在类初始化程序中传入枚举案例的数组:
class EnumEditActivity<E>(val values: Array<E>)
【问题讨论】:
-
如果使用纯 Kotlin,这个问题会更有价值,因为您的问题与 Android 无关! :)
-
谢谢,好点子。已从示例中删除了不必要的 Android 代码
-
查看我的更新答案。您对
Enum基类的想法已经是正确的方向。请不要将部分答案放在原始问题中,因为它会使其他答案不完整/过时。仅将 cmets 放在特定答案的评论部分中的答案。 :)