哪一种用法是首选枚举值()或枚举类getenumconstants ()?



要得到某些Enum类型TestEnumenum常数数组,我们有两种选择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实例来执行此操作。

最新更新