我想獲得一個實例enum類型創建枚舉的一個實例,以便:的Java通過反射
String enumString="abc";
MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString);
這給了我一個不可兌換的類型。
我想獲得一個實例enum類型創建枚舉的一個實例,以便:的Java通過反射
String enumString="abc";
MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString);
這給了我一個不可兌換的類型。
您正在尋找MyClass.MyEnum.valueOf(enumString)
。不需要完全限定字符串中的類。
Enum.valueOf將做到這一點,但它是相當挑剔它的類型。確保你將Class
投射到Class<? extends Enum>
。例如:
enum Foo {
BLAT,
BLARG
};
System.out.println(Enum.valueOf((Class<? extends Enum>)Class.forName("Foo"), "BLARG"));
爲什麼反射是必需的?爲什麼不只是MyEnum e = Enum.valueOf(MyEnum.class,「abc」); – 2011-02-24 19:22:26
原始問題的作者建議他們通過使用'Class.forName'來使用反射,並用'reflection'標記標記問題。棘手的部分是'forClass'的返回類型不是傳遞給'Enum.valueOf'的正確類型。 – ataylor 2011-02-24 19:33:11
如果您在編譯時知道枚舉類型,如作者的示例代碼,則不需要反射。 – 2011-02-24 19:46:08
如果您知道編譯時的類型,爲什麼需要反射? – Bozho 2011-02-24 17:40:55
我聲明瞭一個String來簡化代碼。顯然,在我的代碼中,enumString沒有硬編碼,而是作爲參數傳遞。 – michelemarcon 2011-02-25 08:26:54