使用反射从String构建枚举

时间:2011-06-21 08:33:42

标签: java reflection enums

我有一个采用Enum的方法。 Say方法是methodName(MyTypes),其中MyTypes在另一个类中。 Data{ enum MyTypes{ Id, Value.... } }

我想动态调用此方法。要调用我必须从输入String构建一个MyTypes类型的emum。输入String例如是MyTypes.Value。 如何从这个字符串动态构建枚举实例并传入方法?

当我在做method.getGenericParameterType()时,它会返回类似这样的内容 [class packagename.Data $ MyTypes]

使用这2个东西需要泛型类型和字符串值如何构建枚举?

提前致谢。

4 个答案:

答案 0 :(得分:5)

你的意思是?

String text = 
MyType myType = MyType.valueOf(text);

答案 1 :(得分:4)

类似的东西:解析字符串以获取类名“MyTypes”,然后使用Class.forName(String)获取实际的类对象,然后使用静态Enum.valueOf(Class,String)获取枚举值

答案 2 :(得分:1)

你有什么理由想要使用反射吗? valueOf方法不够吗?

看看this

答案 3 :(得分:0)

这是我所做的:

private static Optional<Object> createEnum(Class<?> enumClass, String enumValue) {
    for (Field field : enumClass.getDeclaredFields()) {
        if (field.isEnumConstant() && field.getName().equals(enumValue)) {
            try {
                Method valueOfMethod = enumClass.getDeclaredMethod("valueOf", String.class);
                return Optional.of(valueOfMethod.invoke(null, enumValue));
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                return Optional.empty();
            }
        }
    }
    return Optional.empty();
}