Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从泛型类获取枚举列表_Java_Android_Generics_Enums - Fatal编程技术网

Java 从泛型类获取枚举列表

Java 从泛型类获取枚举列表,java,android,generics,enums,Java,Android,Generics,Enums,我有一个类,它是用Enum的扩展参数化的 public class MyClass<EnumType extends Enum> { public MyClass(){ Enum<?>[] enums = EnumType.getEnumConstants(); } } 公共类MyClass{ 公共MyClass(){ Enum[]enums=EnumType.getEnumConstants(); } } 该行: Enum<?>[]

我有一个类,它是用Enum的扩展参数化的

public class MyClass<EnumType extends Enum> { 

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

}
公共类MyClass{
公共MyClass(){
Enum[]enums=EnumType.getEnumConstants();
}
}
该行:

Enum<?>[] enums = EnumType.getEnumConstants()
Enum[]enums=EnumType.getEnumConstants()
无法使用“无法解析方法”编译

如何获取基类型和枚举

OTOH,如果我执行以下操作,它工作正常:

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

public void setEnumType(Class由于擦除,必须将枚举类的实例传递给构造函数:

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);
公共类MyClass{
//^别忘了
公共密级(c级){
Enum[]enums=c.getEnumConstants();
}
}
MyClass m=新的MyClass(YourEnum.class);

或者,您可以传递
YourEnum.values()
直接。存在的风险是调用者可能会以正确的顺序传递任何数组,不一定是一个具有所有值的数组,也不一定是重复的数组。

了解类型擦除。看看
EnumSet
,它有接受任何
Enum
的静态工厂方法。另外,你应该使用
class MyClass
我知道类型erasure和我假设这是我的问题。我希望有办法解决它。使用allOf会遇到与上面类似的问题。抱怨参数的“expression expected”。