我正在尝试编写一个Java类,其中一部分需要将未知枚举的值映射到另一个类。我的类包含一个字段 private Map<? extends Enum, Unit> myMap
并使用工厂方法 createMyClass
进行初始化:
public static MyClass <T extends Enum> myClass createMyClass(Class<T> x) {
MyClass theClass = new MyClass() //constructor is private
//...
myMap = new HashMap<T, Unit>();
for(T t : x.getEnumConstants())
myMap.put(t, theClass.new Unit(t));
//...
}
类(class)Unit
是(据我所知,并且需要是) MyClass
的内部类。当我将其放入 NetBeans 中时,它会发出以下消息:
method
put
in interfacejava.util.Map<K,V>
cannot be applied to given types
required: capture #4 of? extends java.lang.Enum
,MyClass.Unit
found:T
,MyClass.Unit
我理解(或者至少我认为我理解)集合需要非常小心通配符的使用以保持类型安全,但我不知道如何 T extends Enum
无法匹配? extends Enum
.
最佳答案
尝试将方法声明更改为:
public static <T extends Enum<T>> MyClass createMyClass(Class<T> x) {
}
关于Enum 类型的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852226/