我想在通用枚举上使用.MAX
来表示值计数。
我试着玩一点,但我无法理解。
当我写作时,例如:
val Enum.Companion.MAX get() = enumValues().size
它在enumValues()
抱怨
类型推断失败:没有足够的信息来推断
中的参数T.内联乐趣> enumValues () :数组 请明确说明。
这很有意义,然后我也尝试了:
val <E> Enum<E>.Companion.MAX get() = enumValues().size
它在第二个E
引用嵌套类时,外部类的类型参数是多余的
有办法吗?
答案 0 :(得分:7)
您必须使用reified类型参数,以便在每个呼叫站点使用实际的枚举类型:
inline val <reified T : Enum<T>> T.MAX get() = enumValues<T>().size
答案 1 :(得分:0)
inline fun <reified T : Enum<T>> max(): Int = enumValues<T>().size
// Then call
max<MyEnum>()
inline val <reified T : Enum<T>> T.max get() = enumValues<T>().size
// Then call
MyEnum.VALUE.max // or myEnumVal.max