2010-02-16 645 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