Java枚举:列出类<! - ?中的枚举值扩展枚举 - >

时间:2009-10-26 19:38:07

标签: java enums

我有枚举的类对象(我有Class<? extends Enum>),我需要获取此枚举所代表的枚举值的列表。 values静态函数具有我需要的功能,但我不确定如何从类对象访问它。

4 个答案:

答案 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