我有枚举的类对象(我有Class<? extends Enum>
),我需要获取此枚举所代表的枚举值的列表。 values
静态函数具有我需要的功能,但我不确定如何从类对象访问它。
答案 0 :(得分:118)
答案 1 :(得分:19)
如果您知道所需值的名称:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
如果你不这样做,你可以得到它们的数组(汤姆得到第一个):
klass.getEnumConstants();
答案 2 :(得分:11)
使用反射很简单,只需调用Class#getEnumConstants():
List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
return Arrays.asList(cls.getEnumConstants());
}
答案 3 :(得分:5)
我很惊讶地发现没有提到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