【问题标题】:NoSuchMethodError for calling an Enum subclass type's valueOf() with reflection?NoSuchMethodError 用于使用反射调用 Enum 子类类型的 valueOf()?
【发布时间】:2026-02-17 04:35:01
【问题描述】:

幸运的是,为了解决我的这个问题,我可以使用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()是一个静态方法,为什么不存在呢?我做错了什么?

【问题讨论】:

    标签: java reflection enums static-methods value-of


    【解决方案1】:

    Class#valueOf 需要一个String 参数:

    Method method = clazz.getMethod("valueOf", String.class);
    

    【讨论】:

      最近更新 更多