EnumMap类的构造函数需要class作为参数。 K.class大部分时间都是作为参数传递的。我仍然没有得到什么是接受这个作为参数,而不是从推导K.为什么EnumMap构造函数需要类参数?
感谢
的原因 - PKC
EnumMap类的构造函数需要class作为参数。 K.class大部分时间都是作为参数传递的。我仍然没有得到什么是接受这个作为参数,而不是从推导K.为什么EnumMap构造函数需要类参数?
感谢
的原因 - PKC
的Map
因此知道所有可能的密钥。它被称为(内部)keyUniverse
。评论说:
所有包括K.值(缓存性能)的
EnumMap
的需求的实现方式中的元信息有关enum
,特别值的数量。 Class
对象提供了这个信息(国际海事组织最好去一个特定的枚举描述符类型)。如果你没有Class
可用,你总是可以使用HashMap
在一些惩罚。我想你可以创建一个可增长/未提交的EnumMap
-Map
。
Tom's答案是正确的,但要解决您的其他问题:此信息不能从类型参数K
推导出的原因归因于type erasure。
泛型是一个编译时的特性,但是这个K类在运行时是需要的,在这种情况下泛型不会做。
正如其他人指出的泛型是一个编译器功能。 jvm对泛型本身没有真正的支持。这意味着通用信息不能在运行时使用。
对于EnumMap<K extends Enum>
这意味着你在运行时得到一个EnumMap<Enum>
没有关于K. Java泛型的这种限制可以通过周围的传递通用参数的类构造函数中工作的任何信息的类的对象仍然存在于运行。
HashMap不能为空,但如果它仅包含一些元素而不包含完整的keyUniverse,那很好。 – 2017-05-19 20:13:40