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