java - 如何在泛型中获取“枚举”的值?
问题描述
如何在泛型中获取“枚举”的值?
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
}
}
解决方案
Class::getEnumConstants
您不能直接从中获取它,因为 Java 编译器会删除T
泛型,因此在运行时它不再知道是什么。T
您可以做的是需要一个Class<T>
对象作为构造函数参数。从那里,您可以通过调用来获取枚举对象的数组Class::getEnumConstants
。
public class Sorter<T extends Enum<T>> {
public Sorter(Class<T> clazz) {
final T[] enumConstants = clazz.getEnumConstants();
}
}
推荐阅读
- php - 使用 $_SESSION['username'] 显示用户名
- powershell - 如何动态替换字符串的最后一部分?
- javascript - 属性匹配时替换或更新数组中的对象
- android - 重新打包后库存 boot.img 无法启动
- javascript - 为什么 updateOne 不更新我的收藏?
- sql-server - 在 CASE 语句中使用两个 = 符号?
- mysql - 查询说明
- html - 如何使用引导程序将大于其容器的段落元素居中?
- python - 尝试使用 subprocess.check_output python 解释器使此代码不可知
- reactjs - 使用 React JS 在 firebase 中查询子集合的子集合