幸运的是,要解决我的这个问题,我可以使用Java: instantiating an enum using reflection(以下一行:Enum.valueOf((Class<Enum>) class.forName("me.example.enums.MyEnumType"), value);
),但我仍然很好奇为什么它最初没有用。
我尝试使用反射调用我自己的Enum子类valueOf(String)
方法,但它抛出NoSuchMethodError
。
java.lang.NoSuchMethodException: me.example.enums.MyEnumType.valueOf()
最小示例如下:
package me.example.enums;
public enum MyEnumType
{
THIS,
THAT;
}
和
package me.example;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MainClass
{
public static void main(String[] args)
{
String enumClassPath = "me.example.enums.MyEnumType";
Object object;
try
{
Class<?> clazz = Class.forName(enumClassPath);
Method method = clazz.getMethod("valueOf");
object = method.invoke(null, "THAT");
}
catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
引发:
java.lang.NoSuchMethodException: me.example.enums.MyEnumType.valueOf()
at java.lang.Class.getMethod(Unknown Source)
at me.example.MainClass.main(MainClass.java:15)
Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: me.example.enums.MyEnumType.valueOf()
at me.example.MainClass.main(MainClass.java:21)
Caused by: java.lang.NoSuchMethodException: me.example.enums.MyEnumType.valueOf()
at java.lang.Class.getMethod(Unknown Source)
at me.example.MainClass.main(MainClass.java:15)
我认为valueOf()
是一个静态方法,为什么它不存在?我做错了什么?
答案 0 :(得分:3)
Class#valueOf
需要String
参数:
Method method = clazz.getMethod("valueOf", String.class);