如果我要声明这样的枚举
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
}
}
是否有可能以任何其他方式迭代枚举值?
答案 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)。