Java的枚举:列表从类枚举值扩展Enum>

问题描述 投票:63回答:4

我有一个枚举(我有一个Class<? extends Enum>)类对象,我需要得到这个枚举表示枚举值的列表。该values静态函数有我需要什么,但我不知道怎么去从类对象访问它。

java enums
4个回答

19
投票

如果你知道值的名称,您需要:

     Class<? extends Enum> klass = ... 
     Enum<?> x = Enum.valueOf(klass, "NAME");

如果不这样做,你可以让他们的阵列(如汤姆先):

     klass.getEnumConstants();

11
投票

使用反射是简单调用Class#getEnumConstants()

List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
   return Arrays.asList(cls.getEnumConstants());
}

6
投票

我很惊讶地看到,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
© www.soinside.com 2019 - 2024. All rights reserved.