繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM