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

Rom*_*man 85 java enums

我遇到了这个问题,我不知道enum我需要迭代其可能值的实际类型.

if (value instanceof Enum){
   Enum enumValue = (Enum)value;
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何从enumValue中提取其可能的值?

Col*_*inD 145

Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
Run Code Online (Sandbox Code Playgroud)

  • @PeterKriens:因为`enum`对象上的`getClass()`可能会返回`enum`类型本身的_subtype_(例如,`enum`常量会覆盖`enum`类型的方法).`getDeclaringClass()`返回声明该常量的`enum`类型,这就是你想要的. (3认同)

小智 85

YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
Run Code Online (Sandbox Code Playgroud)

要么

YourEnumClass[] yourEnums = YourEnumClass.values();
Run Code Online (Sandbox Code Playgroud)


Rod*_*own 13

Enums就像Classes,因为它们是打字的.您当前的代码只是检查它是否是Enum而没有指定它所属的Enum类型.

因为您尚未指定枚举的类型,所以您必须使用反射来找出枚举值列表的内容.

你可以这样做:

enumValue.getDeclaringClass().getEnumConstants() 
Run Code Online (Sandbox Code Playgroud)

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


小智 12

枚举的价值方法

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);
        }
  }
}
Run Code Online (Sandbox Code Playgroud)

http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html


小智 7

...或MyEnum.values()?或者我错过了什么?

  • 是的,枚举的实际类在此处无法用于进行静态方法调用,只是枚举的某个子类型的实例。 (2认同)

Ash*_*rma 5

此处,Role 是一个枚举,其中包含以下值 [ADMIN、USER、OTHER]。

List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
    System.out.println(role);
    });
Run Code Online (Sandbox Code Playgroud)


Dav*_*ren 5

也可以像这样使用 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);
}
Run Code Online (Sandbox Code Playgroud)