从Enum对象获取枚举值

时间:2014-03-11 22:14:34

标签: 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
    }

}

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

1 个答案:

答案 0 :(得分:7)

您必须传递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)。