2013-02-19 130 views
0

我有一個類,看起來像這樣:獲取枚舉從一類具有多個枚舉

public class Catalog { 

    public enum Table1 implements IExcelEnum{ 
      Name, Date, Id 
    } 

    public enum Table2 IExcelEnum { 
     ... 
    } 
} 

我可以得到枚舉表1,如:

System.out.println(Catalog.Table2.Name.value()); 

但我想要什麼要做的是能夠提供一個字符串或標識符,並獲得枚舉返回,以便我可以在創建我的數據對象時引用它。因此,例如:

Data dataCol1 = new Data(Catalog.getEnum("Table1"), ArrayList<String> values); 

我有一個名爲IExcelEnum的界面,沒有任何領域,它只是讓我一般型我枚舉,所以我的數據結構是願意接受任何人。

乾淨的方法是什麼?

+1

我沒有得到你所要完成的任務。如果你在'T1'類型的'Catalog'中有多個字段呢?您期望通過調用「Catalog.getEnum(」T1「)''返回哪一個? – Perception 2013-02-19 19:57:44

+0

抱歉,如果我的變量不明確,我會將它們更改爲更具描述性,有多個枚舉,我希望能夠通過函數調用獲取每個枚舉。 – Aboutblank 2013-02-19 20:03:14

+0

那麼,你想獲得Enum類本身? – Perception 2013-02-19 20:07:10

回答

2

你可能需要使用反射像這樣:

public class Catalog 
{ 
    public interface I 
    { 
    } 

    public enum T1 implements I 
    { 
     A, B, C; 
    } 

    public enum T2 implements I 
    { 
     D, E, F; 
    } 

    public static void main (String [] args) throws Exception 
    { 
     String name = "T1"; 

     Class <? extends I> c = 
      (Class <? extends I>)Class.forName (
       Catalog.class.getName() + "$" + name); 

     I [] values = (I [])c.getMethod ("values").invoke (null); 

     for (I i: values) 
      System.out.println (i); 
    } 
} 
+0

有點討厭我們必須這樣做,但是這解決了我的問題。謝謝。 – 2013-03-01 21:18:44

1

你的意思是Catalog.T1.valueOf("TC1")

在Java中,所有的枚舉實施valueOf(String)方法,see here.