首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用反射接口时抛出的NoSuchMethodException

使用反射接口时抛出的NoSuchMethodException
EN

Stack Overflow用户
提问于 2013-06-27 17:35:11
回答 3查看 120关注 0票数 1

我正在使用反射api从一个类的实例调用一个方法。一切都很好,我一步一步地阅读了许多教程和官方oracle文档,但它抛出了NoSuchMethodException。下面是我的代码:

代码语言:javascript
运行
复制
// Part of the main class
    Class[] argTypes = new Class[2];
    argTypes[0] = HttpServletRequest.getClass();
    argTypes[1] = HttpServletResponse.getClass();

    Object[] args = new Object[2];
    args[0] = request;
    args[1] = response;

    try {
        Class<?> cls = Class.forName("x.xx.xxx.Default");
        Object object = cls.newInstance();
        Method method = cls.getDeclaredMethod("index", argTypes);
        method.invoke(object, args);
    } catch (Exception exception) { // for simplicity of the question, I replaced all exception types with Exception
        exception.printStackTrace();
    }

// End of the main class
    // class x.xx.xxx.Default

    public class Default {
        public void index(HttpServletRequest request, HttpServletResponse response) {
            try {
                PrintWriter writer = response.getWriter();
                writer.println("Welcome");
            } catch (IOException exception) {
                System.err.println(exception);
            }
        }
    }

这是我在异常发生时对exception的描述

代码语言:javascript
运行
复制
java.lang.NoSuchMethodException: x.xx.xxx.Default.index(org.apache.catalina.connector.RequestFacade, org.apache.catalina.connector.ResponseFacade)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-27 17:40:25

我认为你需要在运行时传递静态类,而不是类。

代码语言:javascript
运行
复制
Class[] argTypes = new Class[2];
argTypes[0] = HttpServletRequest.class;
argTypes[1] = HttpServletResponse.class;
票数 3
EN

Stack Overflow用户

发布于 2013-06-27 17:40:45

在以下代码中:

代码语言:javascript
运行
复制
Class[] argTypes = new Class[2];
argTypes[0] = HttpServletRequest.getClass();
argTypes[1] = HttpServletResponse.getClass();

HttpServletRequestHttpServletResponse是变量,因此getClass()调用具有多态性。

你想写下:

代码语言:javascript
运行
复制
Class[] argTypes = new Class[2];
argTypes[0] = HttpServletRequest.class;
argTypes[1] = HttpServletResponse.class;
票数 2
EN

Stack Overflow用户

发布于 2013-06-27 17:51:35

您正在尝试调用类"x.xx.xxx.Default“方法(这是一个有效的类名吗?)在' object‘类型的on对象上。

我会试试这个:

代码语言:javascript
运行
复制
YourClassType object = (YourClassType) cls.newInstance();

或者类似的东西。我现在不能做一个很好的查找,但我确信你正在尝试从一个' object‘类型的对象上调用某个类型的方法,而这个对象并不知道那个特定的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17339646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档