我有一个与Enum扩展相关的类。

public class MyClass<EnumType extends Enum> {

  public MyClass(){
    Enum<?>[] enums = EnumType.getEnumConstants();
  }

}


该行:

Enum<?>[] enums = EnumType.getEnumConstants()


无法使用“无法解析方法”进行编译。

如何获取基本类型并获取枚举?

OTOH,如果我执行以下操作就可以了:

public void setEnumType(Class <? extends Enum> clazz){
   Enum<?>[] enums = clazz.getEnumConstants();
}


我不能将其传递给构造函数,因为它是一个直接插入父级的自定义视图。

最佳答案

由于要进行擦除,因此必须将枚举类的实例传递给构造函数:

public class MyClass<EnumType extends Enum<EnumType>> {
                                       // ^ don't forget this
  public MyClass(Class<EnumType> c){
    Enum<?>[] enums = c.getEnumConstants();
  }

}

MyClass<YourEnum> m = new MyClass<>(YourEnum.class);


或者,您可以直接传递YourEnum.values()。风险在于调用者可以按正确的顺序等传递任何数组,不一定是带有所有值的数组,没有重复项。

08-18 18:55