[英]Weird syntax of an EnumMap
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
是枚举类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.