Відповіді:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
що enum
об’єкт може повернути підтип самого enum
типу (якщо, скажімо, enum
константа перекриває метод від enum
типу). getDeclaringClass()
повертає enum
тип, який оголосив цю константу, саме те, що ви хочете тут.
Enum
s подібні як Class
es тим, що їх набирають. Ваш поточний код просто перевіряє, чи це 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);
}