【发布时间】:2011-05-01 23:40:51
【问题描述】:
我正在尝试编写一个 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));
//...
}
Unit 类是(据我所知,必须是)MyClass 的内部类。当我将它放入 NetBeans 时,它会抱怨以下消息:
接口
java.util.Map<K,V>中的方法put不能应用于给定类型
必需:捕获? extends java.lang.Enum、MyClass.Unit中的#4
找到:T,MyClass.Unit
我理解(或者至少我认为我理解)集合需要非常小心地使用通配符以保持类型安全,但我想不出T extends Enum 为何无法匹配? extends Enum。
【问题讨论】:
标签: java generics collections wildcard enumeration