将Enum.values与扩展Enum的泛型类一起使用

Oli*_*ger 14 java generics enums

我正在尝试使用Enum中的所有可用值初始化泛型类.我是我希望它的工作方式:

public class MyClass<E extends Enum<E>> {

    E[] choices;

    public MyClass() {
        choices = E.values();
    }
Run Code Online (Sandbox Code Playgroud)

但是,E.valuesEclipse中不接受调用,因为此方法未定义此方法.

接受使用此构造函数,但需要调用者提供值:

public MyClass(E[] e) {
    choices = e;
}
Run Code Online (Sandbox Code Playgroud)

在我发现的文档中:

Java编程语言枚举类型比其他语言中的对应类型更强大.枚举声明定义了一个类(称为枚举类型).枚举类主体可以包括方法和其他字段.编译器在创建枚举时会自动添加一些特殊方法.例如,它们有一个静态值方法,该方法返回一个数组,该数组按照声明的顺序包含枚举的所有值.

有没有办法解决这个问题?

aio*_*obe 22

您最好的选择可能Class是将所需的枚举传递给构造函数.(例如,参见如何EnumMap构建.)

然后,您可以使用它来获取常量.clazz.getEnumConstants()