哪种用法是首选 Enum.values() 或 Enum.class.getEnumConstants()?

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()方法不是更好吗?

ern*_*t_k 5

这里唯一适用的答案是基于每个选项的设计目的。

Class类上可用的方法是为类的动态、运行时检查而设计的,因此Class.getEnumConstants()当枚举类仅在程序运行时才知道要为其列出值时使用。您在通用方法中的查找示例说明了正确使用。

如果您静态地了解该类,那么您应该使用YourEnumClass.values(). 没有正当理由通过Class实例来做到这一点。