如何获取泛型中“枚举”的值?
public class Sorter<T extends Enum<?>> {
public Sorter() {
T[] result = T.values(); // <- Compilation error
}
}
另一方面,我可以查询Enum类的values():
enum TmpEnum { A, B }
public class Tmp {
void func() {
T[] result = TmpEnum.values(); // <- It works
}
}
答案 0 :(得分:8)
Class::getEnumConstants
您不能直接从T
中获取它,因为泛型是Java编译器erased的,因此在运行时不再知道T
是什么。
您可以做的是需要一个Class<T>
对象作为构造函数参数。从那里,您可以通过调用Class::getEnumConstants
获得枚举对象的数组。
public class Sorter<T extends Enum<T>> {
public Sorter(Class<T> clazz) {
final T[] enumConstants = clazz.getEnumConstants();
}
}
答案 1 :(得分:0)
另一种方法是使用界面
public interface Sorter{
default public void sorting(){
Sorter[] list=this.getClass().getEnumConstants();
}
}
使用
enum TmpEnum implements Sorter { A, B }