2011-02-24 120 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