Java:Casting Enum <! - ? - >

时间:2017-10-31 09:11:05

标签: java generics enums

想象一下,我有这个:

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<?>。谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

实例化原始类型,然后执行:

MyClass<?> enumClassA = (MyClass<?>)new MyClass(someRandomEnum);

它编译,但会生成以下(无害的)编译器警告:

  

未选中调用'MyClass(E)'作为原始类型'com.foo.bar.SomeRandomEnum'的成员

可以通过添加此注释来抑制

@SuppressWarnings("unchecked")

包含此代码的方法。