Generics 如何在泛型枚举上声明扩展参数

Generics 如何在泛型枚举上声明扩展参数,generics,enums,kotlin,extension-methods,companion-object,Generics,Enums,Kotlin,Extension Methods,Companion Object,我希望在泛型枚举上使用.MAX来表示值计数 我试着玩一点,但我想不出来 例如,当我写作时: val Enum.Companion.MAX get()=enumValues().size 它抱怨enumValues() 类型推断失败:信息不足,无法推断中的参数T 内联乐趣>枚举值 ( ) :数组 请明确指定它 这是有道理的,然后我也尝试: val Enum.Companion.MAX get()=enumValues().size 它抱怨第二个E 当引用嵌套类时,外部类的类型参数是多余的 有办法吗

我希望在泛型枚举上使用
.MAX
来表示值计数

我试着玩一点,但我想不出来

例如,当我写作时:

val Enum.Companion.MAX get()=enumValues().size

它抱怨
enumValues()

类型推断失败:信息不足,无法推断中的参数T

内联乐趣>枚举值 ( ) :数组 请明确指定它

这是有道理的,然后我也尝试:

val Enum.Companion.MAX get()=enumValues().size

它抱怨第二个
E

当引用嵌套类时,外部类的类型参数是多余的


有办法吗?

您必须使用具体化的类型参数,以便在每个调用站点使用实际的枚举类型:

inline val <reified T : Enum<T>> T.MAX get() = enumValues<T>().size
inline val T.MAX get()=enumValues().size
使用具体化类型扩展泛型枚举
inline fun max():Int=enumValues().size
//然后打电话
最大值()
或者,您可以将其添加到枚举的实例中
inline val T.max get()=enumValues().size
//然后打电话
MyEnum.VALUE.max//或myEnumVal.max
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