3

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

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

例如,当我写这个时:

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

它抱怨enumValues()

类型推断失败:没有足够的信息来推断参数 T

inline fun > enumValues ( ) : Array 请明确指定。

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

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

它在第二个抱怨E

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

有办法吗?

4

2 回答 2

8

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

inline val <reified T : Enum<T>> T.MAX get() = enumValues<T>().size
于 2017-09-07T13:49:26.437 回答
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
于 2020-01-17T19:59:01.847 回答