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