2010-02-16 641 views
68

我遇到这个问题,我不知道实际的enum类型我需要迭代其可能的值。如何获得Java中的所有枚举值?

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

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

回答

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

为什么你使用getDeclaringClass()? – 2017-01-20 12:26:49

+3

@PeterKriens:因为'enum'对象上的'getClass()'可能会自己返回一个'enum'类型的_subtype_(如果'enum'常量覆盖''enum'类型中的一个方法)。 'getDeclaringClass()'返回声明常量的'enum'类型,这就是你想要的。 – ColinD 2017-01-20 18:24:40

+0

谢谢!我没有意识到这种情况,但你是对的,常数可以是一个匿名的内部类。 – 2017-01-23 13:58:31

13

Enum s为的,因为它们只是键入lyke Class ES。你当前的代码只是检查它是否是一个枚举,而没有指定它是什么类型的枚举。

因为您尚未指定枚举的类型,您将不得不使用反射来查找枚举值列表。

你能做到像这样:

enumValue.getDeclaringClass().getEnumConstants() 

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

2

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

+0

是的,实际的枚举类不能在这里进行静态方法调用,只是一些Enum子类型的实例。 – ColinD 2010-02-16 14:41:41

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

或者

YourEnumClass[] yourEnums = YourEnumClass.values(); 
+0

'YourEnumClass [] yourEnums = YourEnumClass.class.getEnumConstants();'解决了我从非静态方法调用的问题。 – Jeremy 2017-07-21 23:33:54

5

枚举

返回所有枚举实例

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