Gau*_*m M 3 java reflection enums
要获取enum某种Enum类型的常量数组TestEnum,我们有两个选项 -TestEnum.values()或TestEnum.class.getEnumConstants()。当我查看代码时,我可以看到getEnumConstants()正在values()通过反射调用该方法,然后将其缓存以备将来使用。在返回之前,数组也被克隆。
从下面的问题及其答案(仅关注性能)来看,性能似乎没有太大差异。
枚举 values() 方法和 class.getEnumConstants() 的比较
我想知道这些方法中的一种是否比另一种更受欢迎。我能想到的一个场景是创建一个适用于泛型的方法时,我们将泛型enum类作为参数传递。
<E extends Enum<E>> void doSomething(Class<E> clazz){
for(E type : clazz.getEnumConstants()){
// do something...
}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,我们只能使用该getEnumConstants方法。
还有其他类似的场景吗?如果我确定要使用的类型enum,那么使用values()方法不是更好吗?
这里唯一适用的答案是基于每个选项的设计目的。
Class类上可用的方法是为类的动态、运行时检查而设计的,因此Class.getEnumConstants()当枚举类仅在程序运行时才知道要为其列出值时使用。您在通用方法中的查找示例说明了正确使用。
如果您静态地了解该类,那么您应该使用YourEnumClass.values(). 没有正当理由通过Class实例来做到这一点。