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