我有一个采用Enum的方法。 Say方法是methodName(MyTypes),其中MyTypes在另一个类中。 Data{
enum MyTypes{
Id, Value....
}
}
我想动态调用此方法。要调用我必须从输入String构建一个MyTypes类型的emum。输入String例如是MyTypes.Value。 如何从这个字符串动态构建枚举实例并传入方法?
当我在做method.getGenericParameterType()时,它会返回类似这样的内容 [class packagename.Data $ MyTypes]
使用这2个东西需要泛型类型和字符串值如何构建枚举?
提前致谢。
答案 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();
}