想象一下,我有这个:
class MyClass<E extends Enum<E>> {
private E myEnum;
public MyClass(E myEnum) {
this.myEnum = myEnum;
}
public E getMyEnum() { return myEnum; }
public void setMyEnum(E e) { myEnum = e; }
}
现在我有了这些:
Enum<?> someRandomEnum = // Retrieved from somewhere
MyClass<?> enumClassA = new MyClass<>(someRandomEnum); // Cannot infer type arguments
MyClass<?> enumClassB = new MyClass<Object>(someRandomEnum); // Obviously Object is not subclass of an enum
MyClass<?> enumClassC = new MyClass<? extends Enum<?>>(someRandomEnum); // Cannot instantiate the type MyClass<? extends Enum<?>>
我尝试了多种方法来投射此内容,但我无法将Enum<?>
放入MyClass<?>
。谁知道怎么做?
答案 0 :(得分:0)
实例化原始类型,然后执行:
MyClass<?> enumClassA = (MyClass<?>)new MyClass(someRandomEnum);
它编译,但会生成以下(无害的)编译器警告:
未选中调用'MyClass(E)'作为原始类型'com.foo.bar.SomeRandomEnum'的成员
可以通过添加此注释来抑制
@SuppressWarnings("unchecked")
包含此代码的方法。