A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 heheka123 于 2014-4-23 10:49 编辑
  1. class Demo12
  2. {
  3.         public static void main(String[] args) throws Exception {

  4.                 Collection myProxy = (Collection)Proxy.newProxyInstance(
  5.                         Collection.class.getClassLoader(),
  6.                         new Class[]{Collection.class},
  7.                         new InvocationHandler() {
  8.                                 private ArrayList target = new ArrayList();        
  9.                                 @Override
  10.                                 public Object invoke(Object proxy, Method method, Object[] args)
  11.                                                 throws Throwable {
  12.   //问题在这,我想知道第一个参数Object proxy 是干嘛用的啊,在这个里面都没有上啊
  13.   //还有就是 return  retVal  这个返回的结果是去哪了,干嘛的呢   我return null;就报错了
  14.                                         long beginTime = System.currentTimeMillis();
  15.                                         //代理调用的对象
  16.                                         Object retVal = method.invoke(target,args);
  17.                                         //结束时间
  18.                                         long endTime = System.currentTimeMillis();
  19.                                         System.out.println("运行时间:"+(endTime-beginTime));
  20.                                         return retVal;
  21.                                         //return null;
  22.                                 }
  23.                         });
  24.                 myProxy.add("xxx");
  25.                 myProxy.add("yyy");
  26.                 myProxy.add("zzz");
  27.                 myProxy.add("www");
  28.                 System.out.println("List的长度为:"+myProxy.size());
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 欢欢 于 2014-4-23 12:49 编辑

Object proxy 应该是调用这个方法的本类对象,
因为 method.invoke(target,args); 这个方法调用的是哪个方法还不确定,返回值类型亦不确定,所以不能将null强转为其他类型,所以报错。

回复 使用道具 举报
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html看看这里。
回复 使用道具 举报
重写了invoke方法,这个Object proxy没用到,是为了实现覆盖(要与祖先类中同名方法参数一致)、

覆盖,就是要求子类方法的签名(名称与参数),返回类型与祖先类的保持一致才能实现。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马