Перечисления 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