如果我像这样声明一个枚举
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/