EnumMap定义如下:
Class EnumMap<K extends Enum<K>,V>
“K扩展Enum&lt; K&gt;”是什么真的是什么意思?
我可以理解这个例子:
K extends Number
在这种情况下,K是扩展Number的任何类型的对象。例如Integer。
但K extends Enum<K>
是什么意思?
答案 0 :(得分:2)
K extends Enum<K>
引入了一个类型参数K
,它只能绑定到第一个类型参数本身的Enum
的子类型。
答案 1 :(得分:1)
它的自引用,并且在java.lang.Enum上重复同样的事情 - 确保通用化方法正确投射,请参阅{{的定义3}}
一个好的(如果长的)类似用法的例子是定义AbstractBuilder的java.lang.Enum.valueOf(Class, String)。
另一个this article自引用泛型(C#中的例子,但是点是相同的)
答案 2 :(得分:1)
Enum类定义为:
class Enum<E extends Enum<E>>
这意味着泛型类型本身就是一个枚举类。它只是用java语法表达的方式。
JDK中有很多类似的例子,比如
<T extends Comparable<T>>
答案 3 :(得分:0)
所有枚举类型的超类都是Enum<K>
,泛型参数是Enum<K>
的类型。从本质上讲,这用于确保K
是枚举类型。