Відповіді:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()що enumоб’єкт може повернути підтип самого enumтипу (якщо, скажімо, enumконстанта перекриває метод від enumтипу). getDeclaringClass()повертає enumтип, який оголосив цю константу, саме те, що ви хочете тут.
Enums подібні як Classes тим, що їх набирають. Ваш поточний код просто перевіряє, чи це Enum, не вказуючи, до якого типу Enum він входить.
Оскільки ви не вказали тип перерахування, вам доведеться використовувати відображення, щоб з’ясувати, що таке перелік значень переліку.
Ви можете зробити це так:
enumValue.getDeclaringClass().getEnumConstants()
Це поверне масив об’єктів Enum, кожен з яких буде одним із доступних варіантів.
значення методу переліку
метод enum.values (), який повертає всі екземпляри переліку.
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
Тут Role - це перелік, який містить такі значення [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Можна також використовувати 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);
}