Enum类型的Java泛型
|
我正在尝试编写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
,ѭ8#中捕获#4
找到:T
,MyClass.Unit
我了解(或至少我认为是这样),集合如何在使用通配符时要非常小心,以保持类型安全,但是我无法想到T extends Enum
不能匹配match12ѭ。
没有找到相关结果
已邀请:
3 个回复
味芯憨
的意思是\“键是扩展Enum的某个特定类,但我不知道哪个。\”。而且,由于您不知道它是哪个类,因此无法向此类Map添加任何内容,因此只能从中获取元素并确定它们是14 s。 您可能应该只将该字段声明为
-它将允许所有
子类都很好。 这似乎是对Java枚举的最普遍误解,因为人们普遍看到
通配符,并认为必须使用它来允许子类。
磨标烫徽啪
壬驴拿歪竞