从Enum对象获取枚举值

Som*_*one 1 java enums

如果我要宣布这样的枚举

public enum Foo {A, B, C}
Run Code Online (Sandbox Code Playgroud)

然后我可以使用枚举值

Foo[] values = Foo.values();
Run Code Online (Sandbox Code Playgroud)

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

class Bar<E extends Enum<E>> {

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

}
Run Code Online (Sandbox Code Playgroud)

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

Lou*_*man 7

你必须传递这个Class对象:

 public Bar(Class<E> clazz) {
    E[] values = clazz.getEnumConstants();
 }
Run Code Online (Sandbox Code Playgroud)

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

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