1

一个 EnumMap 定义如下:

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

“K 扩展 Enum<K>” 的真正含义是什么?

例如,我可以理解这一点:

K extends Number

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

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

4

4 回答 4

2

K extends Enum<K>引入了一个类型参数K,该类型参数只能绑定到Enum其第一个类型参数是其自身的子类型。

于 2013-07-17T23:11:58.543 回答
1

它是自引用的,并且在 java.lang.Enum 上重复了同样的事情 - 这是为了确保正确转换泛型方法,请参阅java.lang.Enum.valueOf(Class, String)的定义。

类似用法的一个很好的(如果很长)示例是定义 AbstractBuilder的这篇文章。

自引用泛型的另一个链接(C# 中的示例,但要点相同)

于 2013-07-17T23:10:34.920 回答
1

Enum 类定义为:

class Enum<E extends Enum<E>>

这意味着泛型类型是一个类,它本身就是一个枚举。这只是它在 java 语法中的表达方式。

JDK中有很多类似的例子,比如

<T extends Comparable<T>>
于 2013-07-17T23:11:33.723 回答
0

所有枚举类型的超类是Enum<K>,泛型参数是 的类型Enum<K>。本质上,这是用来确保它K是枚举类型。

于 2013-07-17T23:09:21.440 回答