黑马程序员技术交流社区

标题: 反射的返回为什么是String类型的,不是request的接口? [打印本页]

作者: CrazyProgram    时间: 2013-4-30 16:19
标题: 反射的返回为什么是String类型的,不是request的接口?
本帖最后由 CrazyProgram 于 2013-5-4 18:36 编辑
  1. class MyRequest{
  2.         private HttpServletRequest request;
  3.         public MyRequest(HttpServletRequest request){
  4.                 this.request = request;
  5.         }
  6.         public HttpServletRequest getProxy(){
  7.                 return (HttpServletRequest) Proxy.newProxyInstance(
  8.                                 MyRequest.class.getClassLoader(),
  9.                                 request.getClass().getInterfaces(),
  10.                                 new InvocationHandler() {
  11.                                        
  12.                                         @Override
  13.                                         public Object invoke(
  14.                                                         Object proxy,
  15.                                                         Method method,
  16.                                                         Object[] args)throws Throwable {
  17.                                                 if("getParameter".equals(method.getName())){
  18.                                                         String m = request.getMethod();
  19.                                                         if("post".equalsIgnoreCase(m)){
  20.                                                                 request.setCharacterEncoding("UTF-8");
  21.                                                                 String value = request.getParameter((String)args[0]);//正码
  22.                                                                 return value;//为什么返回的是value而不是return method.invoke(request, args);
  23.                                                         }else if("get".equalsIgnoreCase(m)){
  24.                                                                 String value = request.getParameter((String)args[0]);//乱码
  25.                                                                 byte[] buf = value.getBytes("ISO8859-1");
  26.                                                                 value = new String(buf,"UTF-8");//正码
  27.                                                                 return value;//为什么返回的是value而不是return method.invoke(request, args);
  28.                                                         }
  29.                                                 }else{
  30.                                                         return method.invoke(request, args);
  31.                                                 }
  32.                                                 return null;
  33.                                         }
  34.                                 });
  35.         }
  36. }
复制代码

作者: CrazyProgram    时间: 2013-4-30 17:11
尹桥印 发表于 2013-4-30 16:30
request.getparameter(string str)的返回值是Sting类型的,你不是写了一个else嘛,如果在if里为false,则会 ...

可是最上面限定的返回对象是HttpServletRequest,那我返回了String类型的,这样好么?感觉一点都不大噶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2