Respostas:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()em um enumobjeto pode retornar um subtipo do enumpróprio tipo (se, digamos, a enumconstante substitui um método do enumtipo). getDeclaringClass()retorna o enumtipo que declarou aquela constante, que é o que você deseja aqui.
Enums são como Class es no sentido de que são digitados. Seu código atual apenas verifica se é um Enum sem especificar de que tipo de Enum faz parte.
Como você não especificou o tipo de enum, terá que usar reflexão para descobrir qual é a lista de valores de enum.
Você pode fazer assim:
enumValue.getDeclaringClass().getEnumConstants()
Isso retornará uma matriz de objetos Enum, com cada um sendo uma das opções disponíveis.
método de valores de enum
método enum.values () que retorna todas as instâncias de 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
Aqui, Role é um enum que contém os seguintes valores [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Também é possível usar o java.util.EnumSet desta forma
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}