如果我要宣布这样的枚举
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)
是否有可能以任何其他方式迭代枚举值?
你必须传递这个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).
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |