黑马程序员技术交流社区

标题: 代理相关问题:为什么打印不是1 [打印本页]

作者: wowo6288    时间: 2013-12-26 23:19
标题: 代理相关问题:为什么打印不是1
本帖最后由 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即使说全新的对象替换了原来的对象最后应该还是有一个添加进去了吧
复制代码

作者: rainforestking    时间: 2013-12-27 10:54
楼主在学动态代理和反射啊!好难~~
作者: 不愿一人    时间: 2013-12-27 12:14
哥们差点让你给忽悠住,你说的对在调用最后一个add()方法时,proxy3里面确实有一个元素,也就是最后
你添加的那个"1235",但是你要打印这个proxy3的长度时,又重新调用了一次动态代理类中的invoke()方法,
所以在这里只是声明了一个List类型的对象,而没有向里面添加元素,所以对象的长度肯定是0 啊.
你可以在: System.out.println(proxy3.size());
这句话前打个断点,用debug模式,进去方法内部,看执行的过程,
如果还不懂,就在问我
作者: wowo6288    时间: 2013-12-27 18:33
不愿一人 发表于 2013-12-27 12:14
哥们差点让你给忽悠住,你说的对在调用最后一个add()方法时,proxy3里面确实有一个元素,也就是最后
你添加的 ...

嗯就是我也没有想到起用bug来看看,我觉得你还是理解得比较透彻,应该就是这个答案
作者: wowo6288    时间: 2013-12-27 18:34
rainforestking 发表于 2013-12-27 10:54
楼主在学动态代理和反射啊!好难~~

呵呵就是啊,嘿嘿




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