我希望有一个枚举来返回一个接口的实例,使用泛型。我还不清楚。我不确定如何表达我的问题。下面是我试图开始工作的代码。它不会编译,因为枚举要求构造函数处理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();
}
}
答案 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;
}
//...
}