Java通过反射创建枚举实例

mic*_*con 4 java reflection enums

我想获取枚举类型的实例,以便:

String enumString="abc";
MyClass.MyEnum enumType=Class.forName("com.MyClass.MyEnum."+enumString);
Run Code Online (Sandbox Code Playgroud)

这给了我一个不可思议的类型.

ata*_*lor 19

Enum.valueOf会这样做,但它的类型非常挑剔.确保你施放ClassClass<? extends Enum>.例:

enum Foo {
    BLAT,
    BLARG
};

System.out.println(Enum.valueOf((Class<? extends Enum>)Class.forName("Foo"), "BLARG"));
Run Code Online (Sandbox Code Playgroud)

  • 问题是"Java通过反射创建枚举**的实例".示例代码可能只是说明了一种无效的方法. (3认同)
  • 为什么需要反思?为什么不只是 MyEnum e = Enum.valueOf( MyEnum.class, "abc"); (2认同)
  • 原始问题的作者建议他们使用`Class.forName`进行反射,并使用`reflection`标签标记问题.棘手的部分是`forClass`的返回类型不是传递给'Enum.valueOf`的正确类型. (2认同)
  • 我们没有足够的信息来了解反射是否是此用户的要求,或者是否需要实施细节.因此bozho的上述问题,以及我对提出问题的人的澄清.这不是对你的批评,只是澄清. (2认同)

Yis*_*hai 7

你在找MyClass.MyEnum.valueOf(enumString).无需完全限定字符串中的类.