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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!