You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Class.forName().getMethods()获取的方法存入Map<String, Supplier<String>>

错误原因

Method call expected 报错是因为你代码中的methodz是java.lang.reflect.Method类型的反射对象,不是可直接调用的方法名,无法直接通过methodz()的形式执行。

解决方案

你需要通过反射的invoke方法执行目标方法,同时处理反射调用的异常,还要注意如果是实例方法需要先实例化目标类,示例修改代码如下:

// 如果目标类是实例方法,先实例化对象(静态方法可跳过这步,invoke时传null)
Object targetInstance = clazz.getDeclaredConstructor().newInstance();

for (Method methodz : clazz.getMethods()) {
    if (methodz.isAnnotationPresent(GetMapping.class)) {
        // 从注解中获取接口路径,不要写死,避免key重复覆盖
        GetMapping getMapping = methodz.getAnnotation(GetMapping.class);
        String mappingKey = "GET " + getMapping.value()[0];
        
        requestMappings.put(mappingKey, () -> {
            try {
                // 反射调用方法,无参方法第二个参数留空即可
                return (String) methodz.invoke(targetInstance);
            } catch (Exception e) {
                // 按业务需求处理调用异常,此处示例抛出运行时异常
                throw new RuntimeException("接口方法调用失败", e);
            }
        });
    }
}

注意事项

  • 若调用的是静态方法,invoke的第一个参数直接传null即可,不需要实例化目标类
  • 需确保被@GetMapping标注的方法返回值为String,否则强转时会抛出类型转换异常
  • 若所有遍历的方法都属于同一个类,实例化代码提到循环外部即可,无需循环内重复实例化

内容的提问来源于stack exchange,提问作者Jason Rich Darmawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:42:03