代码之家  ›  专栏  ›  技术社区  ›  Jai

Java:强制转换枚举<?>

  •  3
  • Jai  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  0
  •   Bohemian    7 年前

    实例化原始类型,然后强制转换:

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

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

    未选中调用“MyClass(E)”,作为原始类型“com”的成员。傅。酒吧SomeRandomEnum'

    @SuppressWarnings("unchecked")
    

    到包含此代码的方法。