[英]Enum to return an instance of an interface using generics in Java?
我想有一个枚举,使用泛型返回接口的实例。 我还不太清楚。 我不确定如何表达我的问题。 以下是我要开始工作的代码。 它不会编译,因为枚举要构造函数显式处理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();
}
}
问题是Class<MyInterface>
只能是MyInterface.class
,而不能是任何实现类,例如ImplementingClass.class
。
您可以使用通配符在aClass
的声明上创建一个上限,以获取表示任何实现MyInterface
类的Class
对象:
private Class<? extends MyInterface> aClass;
private MyEnum(String code, Class<? extends MyInterface> aClass) {
this.code = code;
this.aClass = aClass;
}
通配符和强制转换的某些用法可以起到神奇的作用:
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;
}
//...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.