Перечисления Java: список перечисляемых значений из класса


у меня есть объект класса для перечисления (у меня есть Class<? extends Enum>) и мне нужно получить список перечисленных значений, представленных этим перечислением. Элемент values статическая функция имеет то, что мне нужно, но я не уверен, как получить доступ к нему из объекта класса.

4 56

4 ответа:

Если вы знаете имя нужного вам значения:

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

Если вы этого не сделаете, вы можете сделать массив из них (как Том добрался до первой):

     klass.getEnumConstants();

С помощью отражение - это просто, как вызов класс#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