2011-02-24 81 views
4

我想獲得一個實例enum類型創建枚舉的一個實例,以便:的Java通過反射

String enumString="abc"; 
MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString); 

這給了我一個不可兌換的類型。

+3

如果您知道編譯時的類型,爲什麼需要反射? – Bozho 2011-02-24 17:40:55

+0

我聲明瞭一個String來簡化代碼。顯然,在我的代碼中,enumString沒有硬編碼,而是作爲參數傳遞。 – michelemarcon 2011-02-25 08:26:54

回答

7

您正在尋找MyClass.MyEnum.valueOf(enumString)。不需要完全限定字符串中的類。

15

Enum.valueOf將做到這一點,但它是相當挑剔它的類型。確保你將Class投射到Class<? extends Enum>。例如:

enum Foo { 
    BLAT, 
    BLARG 
}; 

System.out.println(Enum.valueOf((Class<? extends Enum>)Class.forName("Foo"), "BLARG")); 
+1

爲什麼反射是必需的?爲什麼不只是MyEnum e = Enum.valueOf(MyEnum.class,「abc」); – 2011-02-24 19:22:26

+1

原始問題的作者建議他們通過使用'Class.forName'來使用反射,並用'reflection'標記標記問題。棘手的部分是'forClass'的返回類型不是傳遞給'Enum.valueOf'的正確類型。 – ataylor 2011-02-24 19:33:11

+1

如果您在編譯時知道枚舉類型,如作者的示例代碼,則不需要反射。 – 2011-02-24 19:46:08