幸运的是,为了解决我的这个问题,我可以使用Java:使用反射来实例化枚举(以下行:) 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()
是静态方法,为什么不存在呢?我究竟做错了什么?