NoSuchMethodError для вызова valueOf() типа подкласса Enum с отражением?
К счастью, для решения этой моей проблемы я мог бы использовать 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()
был статический метод, почему он не существует? Что я делаю неправильно?
1 ответ
Решение
Class#valueOf
нужен String
параметр:
Method method = clazz.getMethod("valueOf", String.class);