Ну, есть способ в класе Class<T>
называется getEnumConstants()
который делает именно это.Таким образом, я имел этот метод, который распечатывается константы перечислений для любого значения перечисления здесь:
public <E extends Enum<E>> void printEnums(E e){
for(E value : e.getDeclaringClass().getEnumConstants()){
System.out.println("Value: "+value);
}
}
Для вызова я хотел бы использовать что-то вроде
printEnums(Enum.SOME_VALUE);
хотя я думаю, что следующий метод лучше, потому что она принимает в качестве параметра класс перечисления непосредственно:
public static <E extends Enum<E>> void printEnums(Class<E> e){
for(E value : e.getEnumConstants()){
System.out.println("Value: "+value);
}
}
Вы можете назвать этот метод следующим образом: printEnums(EnumClass.class);
Я знаю, что вы не спрашиваете, как печатать значения перечисления, но эти методы, приведенные выше, хороши, чтобы дать вам головной убор о том, как получить доступ к константам, заданным типу или классу.
EDIT 1: Изменил код. Спасибо @JBNizet
EDIT 2: Изменен код еще раз в соответствии с комментарием @ Tunaki. Примечание: изначально он был адресован Pshemo's answer
Интересное примечание: 'getEnumConstants()' фактически реализуется [вызовом 'values ()' в классе enum через отражение] (http://hg.openjdk.java.net /jdk8u/jdk8u/jdk/file/96393e490afd/src/share/classes/java/lang/Class.java#l3307). :-) (Отражение происходит только один раз для каждого класса: значения кэшируются, а 'getEnumConstants()' возвращает защитную копию этих значений для каждого вызова.) –