要得到某些Enum
类型TestEnum
的enum
常数数组,我们有两种选择TestEnum.values()
或TestEnum.class.getEnumConstants()
。当我查看代码时,我可以看到getEnumConstants()
通过反射调用values()
方法,然后缓存它以备将来使用。在返回之前,数组也被克隆。
从下面的问题及其答案(只关注性能)来看,似乎性能上没有太大的区别。
枚举值()方法与class.getEnumConstants()的比较
我想知道这些方法中是否有一种优于另一种。我能想到的一种情况是,当创建一个泛型方法时,我们传递一个泛型enum
类作为参数。
<E extends Enum<E>> void doSomething(Class<E> clazz){
for(E type : clazz.getEnumConstants()){
// do something...
}
}
在上面的例子中,我们只能使用getEnumConstants
方法。
还有其他类似的场景吗?如果我确定我要使用的enum
的类型,那么使用values()
方法不是更好吗?
这里唯一适用的答案是基于每个选项的设计目的。
Class
类上可用的方法是为动态的、运行时的类检查而设计的,所以Class.getEnumConstants()
是在枚举类只在程序运行时才知道其值的情况下使用的。您在泛型方法中查找的示例说明了正确的用法。
如果您静态地知道该类,那么您应该使用YourEnumClass.values()
。没有合理的理由通过Class
实例来执行此操作。