Luckily, to solve this problem of mine, I could use Java: instantiating an enum using reflection (the following line: Enum.valueOf((Class<Enum>) class.forName("me.example.enums.MyEnumType"), value);
), however I am still curious why it didn't work initially.
I tried calling my own Enum subclass's valueOf(String)
method using reflection, but it threw a NoSuchMethodError
.
java.lang.NoSuchMethodException: me.example.enums.MyEnumType.valueOf()
A minimal example is the following:
package me.example.enums;
public enum MyEnumType
{
THIS,
THAT;
}
and
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);
}
}
}
Which throws:
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)
I thought valueOf()
was a static method, why does it not exist? What am I doing wrong?
Class#valueOf
needs a String
parameter:
Method method = clazz.getMethod("valueOf", String.class);