java - 在 Java 中使用泛型返回接口(interface)实例的枚举?

标签 java generics enums

我想要一个枚举来使用泛型返回接口(interface)的实例。我还不太明白。我不太确定如何表达我的问题。下面是我试图开始工作的代码。它不会编译,因为枚举希望构造函数显式处理 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的声明创建上限。采取Class表示任何实现 MyInterface 的类的对象:

private Class<? extends MyInterface> aClass;

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

关于java - 在 Java 中使用泛型返回接口(interface)实例的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937977/

相关文章:

java - 以 "&"字符为值解析 Url 中的参数的好方法是什么?

java - 使用 Spring MVC 为 @RequestBody 使用泛型类型时出现 "argument type mismatch"错误

c# - 反射(reflect)具有约束的泛型类型的所有可能排列

java - 实体管理器 @Enumerated(EnumType.STRING) - 如何让它使用 toString()?

java - Android HTML Jsoup

java - 错误:(25, 94)错误:不兼容的类型:SettingsFragment无法转换为Fragment

java - 从适用于 Android 应用程序 API 17+ 的 CellSignalStrengthLte 获取 RSRP

c# - 获取泛型类型的源代码表示?

java - 如何在 Java 8 中通过 Enum 重用重复代码?

python - ctypes:传递和读取枚举指针