EnumMap的奇怪语法

时间:2013-07-17 23:03:24

标签: java enums

EnumMap定义如下:

Class EnumMap<K extends Enum<K>,V>

“K扩展Enum&lt; K&gt;”是什么真的是什么意思?

我可以理解这个例子:

K extends Number

在这种情况下,K是扩展Number的任何类型的对象。例如Integer。

K extends Enum<K>是什么意思?

4 个答案:

答案 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是枚举类型。