java - 从枚举对象获取枚举值

标签 java enums

如果我像这样声明一个枚举

public enum Foo {A, B, C}

然后我可以使用

获取枚举值
Foo[] values = Foo.values();

但是,如果我想像这样将 Foo 作为通用类型传递,我无法获取值,因为它是通用的。

class Bar<E extends Enum<E>> {

    public Bar(E e) {
        E[] values = e.values(); // not possible
    }

}

是否可以通过任何其他方式迭代枚举值?

最佳答案

您必须传递 Class 对象:

 public Bar(Class<E> clazz) {
    E[] values = clazz.getEnumConstants();
 }

...或者,如果您有一个枚举元素 e,您可以使用 e.getDeclaringClass().getEnumConstants()。 (不要使用 e.getClass().getEnumConstants(),如果您的枚举常量定义了它们自己的特定于常量的方法,这将不起作用。)

另一种选择:EnumSet.allOf(clazz),实际上在很多方面都比 clazz.getEnumConstants() 更有效,因为它是 O(1) 而不是枚举常量的数量为 O(n)。

关于java - 从枚举对象获取枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337815/

相关文章:

java - Spring boot Web服务/微服务和调度

c++ - 从枚举类型到 int 的隐式转换如何可能?

java - 为什么枚举要实现接口(interface)?

c++ - Qt、枚举和元对象编译器

java - 过滤掉旧行的重复条目

java - 在 Robolectric 测试中使用 Android KeyStore

java编程和java单例多线程问题(单例与多线程)

c - C-使用枚举向用户发送错误消息?

java - 什么时候创建 Enum 实例?

java - eclipse spring mvc 项目中 servlet 不可用错误