一个 EnumMap 定义如下:
Class EnumMap<K extends Enum<K>,V>
“K 扩展 Enum<K>” 的真正含义是什么?
例如,我可以理解这一点:
K extends Number
在这种情况下,K 是扩展 Number 的任何类型的对象。例如整数。
但这是什么K extends Enum<K>
意思?
K extends Enum<K>
引入了一个类型参数K
,该类型参数只能绑定到Enum
其第一个类型参数是其自身的子类型。
它是自引用的,并且在 java.lang.Enum 上重复了同样的事情 - 这是为了确保正确转换泛型方法,请参阅java.lang.Enum.valueOf(Class, String)的定义。
类似用法的一个很好的(如果很长)示例是定义 AbstractBuilder的这篇文章。
自引用泛型的另一个链接(C# 中的示例,但要点相同)
Enum 类定义为:
class Enum<E extends Enum<E>>
这意味着泛型类型是一个类,它本身就是一个枚举。这只是它在 java 语法中的表达方式。
JDK中有很多类似的例子,比如
<T extends Comparable<T>>
所有枚举类型的超类是Enum<K>
,泛型参数是 的类型Enum<K>
。本质上,这是用来确保它K
是枚举类型。