Risposte:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
su un enum
oggetto può restituire un sottotipo del enum
tipo stesso (se, diciamo, la enum
costante sovrascrive un metodo dal enum
tipo). getDeclaringClass()
restituisce il enum
tipo che ha dichiarato quella costante, che è quello che vuoi qui.
Enum
s sono proprio come Class
es in quanto sono digitati. Il codice corrente controlla solo se si tratta di un Enum senza specificare il tipo di Enum di cui fa parte.
Poiché non hai specificato il tipo di enum, dovrai usare la reflection per scoprire qual è l'elenco dei valori di enum.
Puoi farlo in questo modo:
enumValue.getDeclaringClass().getEnumConstants()
Ciò restituirà un array di oggetti Enum, ognuno dei quali è una delle opzioni disponibili.
metodo dei valori di enumerazione
enum.values () che restituisce tutte le istanze di enum.
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
... o MyEnum.values ()? Oppure mi sfugge qualcosa?
In questo caso, il ruolo è un'enumerazione che contiene i seguenti valori [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Si può anche usare java.util.EnumSet in questo modo
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}