如何获得泛型中“枚举”的值?
public class Sorter<T extends Enum<?>> {
public Sorter() {
T[] result = T.values(); // <- Compilation error
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我可以查询Enum类的values():
enum TmpEnum { A, B }
public class Tmp {
void func() {
T[] result = TmpEnum.values(); // <- It works
}
}
Run Code Online (Sandbox Code Playgroud)
Class::getEnumConstants您不能直接从中获取它,T因为Java编译器会删除泛型,因此在运行时不再知道它是什么T。
您可以做的是将一个Class<T>对象用作构造函数参数。从那里可以通过调用获取枚举对象数组Class::getEnumConstants。
public class Sorter<T extends Enum<T>> {
public Sorter(Class<T> clazz) {
final T[] enumConstants = clazz.getEnumConstants();
}
}
Run Code Online (Sandbox Code Playgroud)