我有一个枚举(我有一个Class<? extends Enum>
)类对象,我需要得到这个枚举表示枚举值的列表。该values
静态函数有我需要什么,但我不知道怎么去从类对象访问它。
如果你知道值的名称,您需要:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
如果不这样做,你可以让他们的阵列(如汤姆先):
klass.getEnumConstants();
使用反射是简单调用Class#getEnumConstants():
List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
return Arrays.asList(cls.getEnumConstants());
}
我很惊讶地看到,EnumSet#allOf()
没有被提及:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
创建包含所有在指定元素类型的元素的枚举集。
考虑以下enum
:
enum MyEnum {
TEST1, TEST2
}
简单地调用这样的方法:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
当然,这会返回一个Set
,不是List
,但它应该在许多(大多数?)有足够的用例。
或者,如果你有一个未知enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
这种方法的优点,相比Class#getEnumConstants()
,在于它是类型化的,这样就不可能通过任何其他比enum
它。例如,下面的代码是有效的,并返回null
:
String.class.getEnumConstants();
虽然这不会编译:
EnumSet.allOf(String.class); // won't compile