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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wowo6288 中级黑马   /  2013-12-26 23:19  /  901 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wowo6288 于 2013-12-27 18:35 编辑
  1. Collection proxy3 = (Collection) Proxy.newProxyInstance(
  2.                                 Collection.class.getClassLoader(),
  3.                                 new Class[]{Collection.class},
  4.                                 new InvocationHandler(){
  5.                                 
  6.                                         public Object invoke(Object proxy, Method method, Object[] args)
  7.                                                         throws Throwable {
  8.                                                 //这里是全新的数组对象这个可以理解
  9.                                                 ArrayList<String> target=new ArrayList<String>();
  10.                                                 return method.invoke(target, args);
  11.                                         }
  12.                                 }
  13.                                 );
  14.                 proxy3.add("123");
  15.                 proxy3.add("1234");
  16.                 proxy3.add("1235");
  17.                
  18.                 System.out.println(proxy3.size());//为什么这里是0为什么不是1即使说全新的对象替换了原来的对象最后应该还是有一个添加进去了吧
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

4 个回复

正序浏览
rainforestking 发表于 2013-12-27 10:54
楼主在学动态代理和反射啊!好难~~

呵呵就是啊,嘿嘿
回复 使用道具 举报
不愿一人 发表于 2013-12-27 12:14
哥们差点让你给忽悠住,你说的对在调用最后一个add()方法时,proxy3里面确实有一个元素,也就是最后
你添加的 ...

嗯就是我也没有想到起用bug来看看,我觉得你还是理解得比较透彻,应该就是这个答案
回复 使用道具 举报
哥们差点让你给忽悠住,你说的对在调用最后一个add()方法时,proxy3里面确实有一个元素,也就是最后
你添加的那个"1235",但是你要打印这个proxy3的长度时,又重新调用了一次动态代理类中的invoke()方法,
所以在这里只是声明了一个List类型的对象,而没有向里面添加元素,所以对象的长度肯定是0 啊.
你可以在: System.out.println(proxy3.size());
这句话前打个断点,用debug模式,进去方法内部,看执行的过程,
如果还不懂,就在问我

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 1 0
楼主在学动态代理和反射啊!好难~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马