Natknąłem się na ten problem, że nie znając rzeczywistego enum
typu, potrzebuję iteracji jego możliwych wartości.
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
Jakieś pomysły, jak wyodrębnić z enumValue jego możliwe wartości?
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
naenum
przedmiot może zwrócić podtyp tegoenum
samego typu (w przypadku, powiedzmy,enum
stały zastępuje sposób odenum
rodzaju).getDeclaringClass()
zwracaenum
typ, który zadeklarował tę stałą, co jest tym, czego chcesz tutaj.Lub
źródło
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
rozwiązałem mój problem z wywoływaniem z metody niestatycznej.Enum
s są podobne doClass
es, ponieważ są wpisywane. Twój aktualny kod po prostu sprawdza, czy jest to Enum, bez określania, jakiego typu Enum jest częścią.Ponieważ nie określiłeś typu wyliczenia, będziesz musiał użyć odbicia, aby dowiedzieć się, jaka jest lista wartości wyliczenia.
Możesz to zrobić tak:
To zwróci tablicę obiektów Enum, z których każdy jest jedną z dostępnych opcji.
źródło
wartości metoda wyliczenia
enum.values (), która zwraca wszystkie wystąpienia wyliczenia.
public class EnumTest { private enum Currency { PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs"); private String value; private Currency(String brand) { this.value = brand; } @Override public String toString() { return value; } } public static void main(String args[]) { Currency[] currencies = Currency.values(); // enum name using name method // enum to String using toString() method for (Currency currency : currencies) { System.out.printf("[ Currency : %s, Value : %s ]%n",currency.name(),currency); } } }
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
źródło
... lub MyEnum.values ()? A może coś mi brakuje?
źródło
W tym przypadku rola to wyliczenie zawierające następujące wartości [ADMIN, USER, OTHER].
źródło
Można również w ten sposób użyć java.util.EnumSet
@Test void test(){ Enum aEnum =DayOfWeek.MONDAY; printAll(aEnum); } void printAll(Enum value){ Set allValues = EnumSet.allOf(value.getClass()); System.out.println(allValues); }
źródło