2011-03-18 130 views
2

我有三個枚舉類。我想以某種方式將它們放在數組中,循環訪問數組並在每個枚舉類中調用相同的方法。這在Java中可能嗎?是否可以遍歷幾個枚舉類?

在我看來,你不能將枚舉類型放在數組結構中(除非我錯過了)。

謝謝。

+0

什麼做你的意思是「將[enum classes]放入數組中?」方法是靜態的嗎?向我們展示您嘗試的代碼。 – 2011-03-18 16:28:55

+0

Enum []或Object [],你可以放入任何東西,如果你需要一個通用的方法,只需定義一個接口。 – bestsss 2011-03-18 16:30:13

回答

4

讓每一個枚舉類型實施通用接口具有您要到調用常用的方法。您現在可以將每個枚舉轉換爲此公共接口並調用該方法。也看看EnumSet

+0

我確實嘗試了通用接口路由,但在我的情況下無法正常工作。我在我需要調用的枚舉類中有靜態方法。 – user649716 2011-03-18 16:30:48

+0

@ user649716讓普通方法實現調用每個枚舉類型中的靜態方法 – 2011-03-18 16:32:00

+0

><我沒有想到這個笑話。我會放棄它,謝謝。 – user649716 2011-03-18 16:35:55

1

如果通過枚舉類,你的意思是三個不同的枚舉,每個枚舉都有自己的元素,那麼你可以使用一個Enum[]類型的數組。如果你的意思是來自單枚枚舉的三項,我們稱之爲enum X,然後你將它們放入一個X[]類型的數組中。

如果您試圖在每個函數上調用一個標準枚舉函數,那麼您應該全部設置。如果你需要調用你自己的函數,並且使用Enum[]數組,你需要使用反射或者讓它們全部實現相同的接口。

+0

這不適用於我的情況。我有三個獨立的枚舉類。我不能將它們放在Enum []中,因爲它們無法解析爲變量 - 或者被初始化。 – user649716 2011-03-18 16:33:05

2

這裏是2個枚舉和使用反射的例子:

enum Colour{ 
    RED, 
    BLUE, 
    GREEN; 

    public void foo(){ 
     System.out.println("COLOUR"); 
    } 
} 

enum Fruit { 
    APPLE, 
    BANANA, 
    PEAR; 

    public void foo(){ 
     System.out.println("FRUIT"); 
    } 
} 

你可以把類到一個數組和使用反射來調用一個方法每個枚舉常數:

//create an array 
Class[] arr = new Class[2]; 
arr[0] = Colour.class; 
arr[1] = Fruit.class; 

//call the foo method 
for(Class c : arr){ 
    Method m = c.getMethod("foo", null); 
    for(Object o : c.getEnumConstants()){ 
     System.out.println("Invoking foo on:" + o); 
     m.invoke(o, null); 
    } 
} 
+0

啊,太棒了。這似乎正是我需要的。我會試試這個並報告回來 - 謝謝。 – user649716 2011-03-18 16:40:29

+0

呃。如果你沒有枚舉實現一個接口並完全避免反射? – 2011-03-18 17:03:47

+0

這工作完美。我確實嘗試了接口路由,但是我遇到的問題是將枚舉獲取到數組中。 IE:enumInterface [] = {enum1,enum2}不起作用,因爲enum1/enum2是不可初始化的枚舉類。 – user649716 2011-03-18 17:27:17