Java通过反射创建枚举实例
我想获取枚举类型的实例,以便:Java通过反射创建枚举实例,java,reflection,enums,Java,Reflection,Enums,我想获取枚举类型的实例,以便: String enumString="abc"; MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString); 这给了我一个不可转换的类型。您正在寻找MyClass.MyEnum.valueOf(enumString)。不需要完全限定字符串中的类。查看一下就可以了,但是它对类型非常挑剔。确保将类强制转换为类如果在编译时知道类型,为什么需要反射?我声明了一个字符串以简化代码。显然,
String enumString="abc";
MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString);
这给了我一个不可转换的类型。您正在寻找
MyClass.MyEnum.valueOf(enumString)
。不需要完全限定字符串中的类。查看一下就可以了,但是它对类型非常挑剔。确保将类
强制转换为类如果在编译时知道类型,为什么需要反射?我声明了一个字符串以简化代码。显然,在我的代码中,enumString不是硬编码的,而是作为参数传递的。为什么需要反射?为什么不只是MyEnum e=Enum.valueOf(MyEnum.class,“abc”);原始问题的作者建议他们使用反射,使用Class.forName
并用reflection
标记问题。棘手的是,forClass
的返回类型不是传递给Enum.valueOf
的正确类型。如果您在编译时知道Enum类型,如作者的示例代码中所述,则不需要反射。问题是“Java通过反射创建Enum实例”。示例代码可能只是说明了一种不起作用的方法。我们没有足够的信息来知道反射是该用户的一种需求,还是一个假定必要的实现细节。因此,波佐提出了上述问题,我向提出问题的人作出了澄清。这不是对你的批评,只是澄清。
enum Foo {
BLAT,
BLARG
};
System.out.println(Enum.valueOf((Class<? extends Enum>)Class.forName("Foo"), "BLARG"));