枚举在Java中使用泛型返回接口的实例?

时间:2014-09-19 15:58:42

标签: java generics enums

我希望有一个枚举来返回一个接口的实例,使用泛型。我还不清楚。我不确定如何表达我的问题。下面是我试图开始工作的代码。它不会编译,因为枚举要求构造函数处理ImplementingClass明确。

我的界面

public interface MyInterface {

}

我的实施班

public class ImplementingClass implements MyInterface {

}

我正努力工作的枚举

public enum MyEnum {

    CASE1(“CODE1”, ImplementingClass.class);

    private String code;
    private Class<MyInterface> aClass;

    private MyEnum(String code, Class<MyInterface> aClass) {
        this.code = code;
        this.aClass = aClass;
    }    

    public String getCode() {
        return this.code;
    }

    public MyInterface getInstance() {
        return this.aClass.newInstance();
    }
}

2 个答案:

答案 0 :(得分:2)

问题是,Class<MyInterface>只能是MyInterface.class,而不是ImplementingClass.class等任何实施类。

您可以使用通配符在aClass的声明上创建上限,以获取表示实现Class的任何类的MyInterface对象:

private Class<? extends MyInterface> aClass;

private MyEnum(String code, Class<? extends MyInterface> aClass) {
    this.code = code;
    this.aClass = aClass;
}

答案 1 :(得分:0)

使用通配符和强制转换可以发挥魔力:

public enum MyEnum {

 CASE1("CODE1", (Class<? extends MyInterface>)ImplementingClass.class);

 private String code;
 private Class<? extends MyInterface> aClass;

 private MyEnum(String code, Class<? extends MyInterface> aClass) {
    this.code = code;
    this.aClass = aClass;
 }    

 //...
}
相关问题