繁体   English   中英

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

[英]Which usage is preferred Enum.values() or Enum.class.getEnumConstants()?

要获取某些Enum类型TestEnumenum常量数组,我们有两个选项 - TestEnum.values()TestEnum.class.getEnumConstants() 当我查看代码时,我可以看到getEnumConstants()正在通过反射调用values()方法,然后将其缓存以供将来使用。 在返回之前,数组也会被克隆。

从下面的问题及其答案(仅关注性能)来看,性能似乎没有太大差异。

枚举 values() 方法与 class.getEnumConstants() 的比较

我想知道这些方法中的一种是否比另一种更受欢迎。 我能想到的一种情况是创建一个适用于 generics 的方法时,我们将通用enum class 作为参数传递。

<E extends Enum<E>> void doSomething(Class<E> clazz){
    for(E type : clazz.getEnumConstants()){
        // do something...
    }
}

在上述情况下,我们只能使用getEnumConstants方法。

有没有其他类似的场景? 如果我确定要使用的enum类型,那么使用values()方法不是更好吗?

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

Methods available on the Class class are designed for dynamic, runtime inspection of classes, so Class.getEnumConstants() is to be used when the enum class to list values for is only known when the program is running. 您在通用方法中的查找示例说明了正确的用法。

如果您静态知道 class,那么您应该使用YourEnumClass.values() 没有正当理由通过Class实例对 go 执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM