这是一个枚举类:
enum class Foo(rawValue: Int) {
FIRST(1),
SECOND(2)
}
我可以用来companion object
通过原始值检索类型:
enum class Foo(rawValue: Int) {
FIRST(1),
SECOND(2)
companion object {
fun getCaseBy(value: Int): Foo? {
return entries.firstOrNull { it.rawValue == value }
}
}
}
然后像这样使用它:
Foo.getCaseBy(1)
有没有办法使用泛型将其getCaseBy
放入interface
?那么就不需要为每个枚举添加这种方法了?
类似于:
interface EnumInterface<T> {
companion object {
fun getCaseBy(value: E): T? {
return T.entries.firstOrNull { it.rawValue == value }
}
}
}
enum class Foo(rawValue: Int): EnumInterface(Foo::class) {
FIRST(1),
SECOND(2)
}
T
仅限于Enum
类,E
是检索T
的 rawValue 类型。- 只有
Enum
输入才能确认此接口EnumInterface
这可能吗?
这是一个受Louis Wasserman的评论启发的更清晰的实现。
如果你觉得重写
predicate
函数太麻烦,可以按照下面与旧版本相同的方法,为关键字段创建注解。这是旧版本。
您可以通过反射来实现这一点。
由于枚举类可以具有各种属性名称,因此使用注解
Key
来标记用于比较的属性。请注意,如果没有注释任何属性,
getValue
将会引发NoSuchElement
错误。