如何在 Java 中获取所有枚举值?

我遇到了这个问题,在不知道实际 enum类型的情况下,我需要迭代它的可能值。

if (value instanceof Enum){
Enum enumValue = (Enum)value;
}

有什么办法可以从枚举值中提取它可能的值吗?

172400 次浏览

调用 Class#getEnumConstants获取枚举的元素(如果不是枚举类,则为 null)。

Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();

Enum就像 Class一样,它们是打字的。当前代码只是检查它是否是 Enum,而没有指定它是哪种类型的 Enum 的一部分。

Because you haven't specified the type of the enum, you will have to use reflection to find out what the list of enum values is.

你可以这样做:

enumValue.getDeclaringClass().getEnumConstants()

这将返回一个 Enum 对象数组,每个对象都是可用的选项之一。

还是 MyEnum.values () ? 还是我漏掉了什么?

YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();

或者

YourEnumClass[] yourEnums = YourEnumClass.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,OTER ]。

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);
}

任何试图以 list 形式获取所有值的人都可以简单地做到这一点。

Arrays.asList(YouEnumClass.values())