【问题标题】:How to get all enum values in Java?如何获取Java中的所有枚举值?
【发布时间】:2011-01-17 05:00:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: java enums


    【解决方案1】:

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

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

    【讨论】:

    • 为什么要使用getDeclaringClass()?
    • @PeterKriens:因为enum 对象上的getClass() 可能会返回enum 类型本身的子类型(例如,如果enum 常量覆盖enum 类型的方法)。 getDeclaringClass() 返回声明该常量的 enum 类型,这就是您想要的。
    • 谢谢!我没有意识到这种情况,但你是对的,常量可以是匿名内部类。
    【解决方案2】:
    YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
    

    或者

    YourEnumClass[] yourEnums = YourEnumClass.values();
    

    【讨论】:

      【解决方案3】:

      枚举的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

      【讨论】:

        【解决方案4】:

        Enums 就像Classes 一样,它们是键入的。您当前的代码只是检查它是否是 Enum,而没有指定它属于哪种类型的 Enum。

        因为你还没有指定枚举的类型,你将不得不使用反射来找出枚举值列表是什么。

        你可以这样做:

        enumValue.getDeclaringClass().getEnumConstants() 
        

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

        【讨论】:

          【解决方案5】:

          ... 还是 MyEnum.values() ?还是我错过了什么?

          【讨论】:

          • 是的,枚举的实际类在这里无法进行静态方法调用,只是枚举的某个子类型的一个实例。
          【解决方案6】:

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

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

          【讨论】:

          • 但是,这不是通用的。问题是关于只有 Enum 对象的情况。因此,您需要通过 EnumSet 声明类或更好的方法。
          【解决方案7】:

          也可以像这样使用 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);
          }
          

          【讨论】:

            【解决方案8】:

            任何试图以列表形式获取所有值的人都可以这样做。

            Arrays.asList(YouEnumClass.values())
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-01-12
              • 2021-12-15
              • 1970-01-01
              • 2015-06-12
              • 1970-01-01
              • 2011-04-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多