【发布时间】:2021-02-12 05:06:57
【问题描述】:
要获取一些Enum 类型TestEnum 的enum 常量数组,我们有两个选项-TestEnum.values() 或TestEnum.class.getEnumConstants()。当我查看代码时,我可以看到getEnumConstants() 正在通过反射调用values() 方法,然后将其缓存以备将来使用。在返回之前,数组也会被克隆。
从下面的问题及其答案(仅关注性能)看来,性能上并没有太大差异。
Comparison of enums values() method and class.getEnumConstants()
我想知道其中一种方法是否比另一种更受欢迎。我能想到的一种情况是,在创建一个适用于泛型的方法时,我们将泛型 enum 类作为参数传递。
<E extends Enum<E>> void doSomething(Class<E> clazz){
for(E type : clazz.getEnumConstants()){
// do something...
}
}
在上述情况下,我们只能使用getEnumConstants 方法。
还有其他类似的场景吗?如果我确定要使用的enum 的类型,那么使用values() 方法不是更好吗?
【问题讨论】:
-
除非你需要使用反射,否则使用
values()。 -
@Slaw 任何可能使用反射的场景?除了我提到的那个
-
简单的答案是,当类型仅在运行时已知时,您只需要
getEnumConstants()。如果您在编译时对类具有静态访问权限,则没有理由不使用values()。 -
@ernest_k 我建议您对该评论进行 Amswer,以便可以解决此页面。
-
@Gautham M 你提到的问题打印了 JDK1.8 的测试结果,但是如果你在 JDK16 上运行它,输出的计时结果有很大不同,有利于 values()。
标签: java reflection enums