枚举以返回在Java中使用泛型的接口实例?
我希望有一个枚举来返回一个接口的实例,使用泛型。我还不太明白。我不知道该如何表达我的问题。下面是我正在努力工作的代码。它不会编译,因为枚举希望构造函数显式处理ImplementingClass 我的界面枚举以返回在Java中使用泛型的接口实例?,java,generics,enums,Java,Generics,Enums,我希望有一个枚举来返回一个接口的实例,使用泛型。我还不太明白。我不知道该如何表达我的问题。下面是我正在努力工作的代码。它不会编译,因为枚举希望构造函数显式处理ImplementingClass 我的界面 public interface MyInterface { } 我的执行课 public class ImplementingClass implements MyInterface { } 我正在努力工作的枚举 public enum MyEnum { CASE1(“COD
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();
}
}
公共枚举MyEnum{
案例1(“代码1”,实现类);
私有字符串码;
私有类aClass;
私有MyEnum(字符串代码,类aClass){
this.code=代码;
this.aClass=aClass;
}
公共字符串getCode(){
返回此.code;
}
公共MyInterface getInstance(){
返回此.aClass.newInstance();
}
}
问题在于类只能是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;
}
private Class一些通配符的使用和施法的神奇之处在于:
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;
}
//...
}
公共枚举MyEnum{
案例1(“代码1”,(ClassYou没有正确使用枚举…除非您将MyEnum设置为classOK,否则此代码将无法工作。谢谢。是否有任何方法可以实例化该类而不引发InstantiationException和IllegalAccessException?或者有更好的方法来解决此问题?不,如果您有一个类
对象,并且您想要该类的实例,那么,就没有办法捕获这些异常,或者必须在方法上使用抛出子句来声明它们。