如何在通用枚举伙伴上声明扩展参数

How to declare extension parameter on generic enums companions

我想在通用枚举上使用 .MAX 来表示值计数。

我试着玩了一下,但我想不通。

当我写的时候,例如,这个:

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

它在 enumValues() 上抱怨

Type inference failed: Not enough information to infer parameter T in

inline fun > enumValues ( ) : Array Please specify it explicitly.

有道理,那我也试了:

val <E> Enum<E>.Companion.MAX get() = enumValues().size

第二次报错E

Type arguments for outer class are redundant when nested class is referenced

有办法吗?

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

inline val <reified T : Enum<T>> T.MAX get() = enumValues<T>().size

使用具体化类型扩展通用枚举

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