Natknąłem się na ten problem, że nie znając rzeczywistego enumtypu, 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?
Odpowiedzi:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()na enumprzedmiot może zwrócić podtyp tego enumsamego typu (w przypadku, powiedzmy, enumstały zastępuje sposób od enumrodzaju). getDeclaringClass()zwraca enumtyp, który zadeklarował tę stałą, co jest tym, czego chcesz tutaj.
Enums są podobne do Classes, 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:
enumValue.getDeclaringClass().getEnumConstants()
To zwróci tablicę obiektów Enum, z których każdy jest jedną z dostępnych opcji.
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
W tym przypadku rola to wyliczenie zawierające następujące wartości [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
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);
}