Я столкнулся с этой проблемой, потому что, не зная фактического enumтипа, мне нужно перебрать его возможные значения.
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
Есть идеи, как извлечь из enumValue его возможные значения?
Ответы:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()что enumобъект может возвращать подтип самого enumтипа (если, скажем, enumконстанта переопределяет метод из enumтипа). getDeclaringClass()возвращает enumтип, который объявил эту константу, что вам и нужно здесь.
Enums похожи на Classes в том, что они набраны. Ваш текущий код просто проверяет, является ли это Enum, не указывая, частью какого типа Enum он является.
Поскольку вы не указали тип перечисления, вам придется использовать отражение, чтобы узнать, что такое список значений перечисления.
Сделать это можно так:
enumValue.getDeclaringClass().getEnumConstants()
Это вернет массив объектов Enum, каждый из которых является одним из доступных вариантов.
values метод перечисления
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);
}