2 qq 31910313 qq_31910313 于 2016.02.15 10:57 提问

输入参数之后就直接提示某某方法不存在,可我明明已经写了相对应的方法了.
protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String methodName = request.getParameter("method");

// System.out.println(methodName+"======");
if (methodName == null || methodName.trim().isEmpty()){
throw new RuntimeException("请传入参数");
}

    Class<?> clazz = this.getClass();

// System.out.println(clazz);
Method m = null;
try {
m = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
System.out.println(m.getParameterCount());
} catch (Exception e) {
throw new RuntimeException("没有查询到" + methodName + ", 这个方法");
}
try {
m.invoke(this, request,response);//反射调用,相当于 this.addUser(request,response);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
System.out.println("您调用的" + methodName + "方法内部出现异常");
throw new RuntimeException(e);
}
}

protected void addUser(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    System.out.println("addUser()...");
}

2个回答

fk002008
fk002008   2016.02.15 11:05

clazz.getMethod 错了

fk002008
fk002008 改成这个public不好把,你用这个Declared,即使你用private定义也可以读取
2 年多之前 回复
qq_31910313
qq_31910313 回复lambda-fk: 哦哦 ,,知道了 .3q,我后来把protected 改成 public权限就好了
2 年多之前 回复
fk002008
fk002008 getDeclaredMethod
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.29 22:10

java反射时要注意方法的修饰符也会影响getMethod的返回,它只会返回public的父类方法及自己的方法;getDeclaredMethod只会返回自己类中定义的public方法。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
js明明有这个函数却提示is not undefined
我们就以onclick事件作为例子(其它事件类似),有时我们会遇到这种情况: html代码: 点击我 javascript代码: $("#test_id").attr("onclick","test_click"); functio test_click(){ alert("点击了a标签"); } 我们查看元素时,onclick确实是给a标签添加上了,但是点击时却提示"test
matlab guide未定义与 'matlab.ui.control.UIControl' 类型的输入参数相对应的函数
事情是这样的:使用matlab的guide进行界面开发的时候,先拖了一个控件到窗口,然后写它的回调函数,后来发现这个控件的Tag名取的不合理,就将其改动了,比如从原来的”slider2”改为了”slider_height”,然后保存运行,matlab就报错了,错误类似下面:错误使用 feval 未定义与 'matlab.ui.control.UIControl' 类型的输入参数相对应的函数 'sli
未定义与 'single' 类型的输入参数相对应的函数 'vl_pr'
这个问题是在实验AlfredXiangWu的人脸验证实验时遇到的问题,后来在百度上搜索,居然发现有人和我遇到了相同的问题,而且直接在github上询问了AlfredXiangWu,幸运的是大神给出了答案,原来是我们缺少一个VLFeat的库(参考网址:https://github.com/AlfredXiangWu/face_verification_experiment/issues/12)。大神
js中prototype的陷阱
原型陷阱 //当我们对原型对象执行完全替换时,可能会触发原型链中某种异常 //prototype.constructor属性是不可靠的 function Dog(){ this.tail=true; } var benji=new Dog(); var rusty=new Dog(); Dog.prototype.say=function(){ return "
定义了function, 但提示未定义
定义funtion,但还是提示未定义
jsp导入的包,包里明明有方法,但总是报方法没有定义的错
这个错出现了两次,第一次不知道怎么忽然就结局了,第二次整了半天一直不行,最后把项目删了重新从svn中检出结果就剋以使了 以后遇见这种错先检查是不是方法名写错了,如果真的真的最后还是不行还是报错,试试删了重新检出
当一个页面全部加载完才触发的事件
ie: document.onreadystatechange=function(){document.readyState=="complete"}FF: document.addEventListener("DOMContentLoaded",handle,false)
11.15 matlab 常见报错的解决方案
(1)matlab 未定义与 'char' 类型的输入参数相对应的函数 文件名与函数对应不上 (2)删除文件,转移文件,需要保存 ctrl+s (3) mex scale_sum.cpp Error: Could not detect a compiler on localsystem which can compile the specified inputfile(s) at D
使用return结束一个方法
在Java中,可以使用return语句直接结束一个方法的执行。 使用return结束方法示例 public class Method{        public static void main(String[] args){               System.out.println("1,调用fun()方法之前。");               fun(
基本数据类型和包装类、String类的转换&toString方法&instanceof运算符
基本数据类型和包装类、String类的转换&toString方法&instanceof运算符1.包装类