黑马程序员技术交流社区

标题: 关于代理问题 [打印本页]

作者: Inspur    时间: 2013-9-18 10:52
标题: 关于代理问题
本帖最后由 Inspur 于 2013-9-20 11:42 编辑

Collection proxy3 = (Collection)Proxy.newProxyInstance(
                                             Collection.class.getClassLoader(),
                                             new Class[]{Collection.class},
                                             new InvocationHandler() {
                       // 指定目标
                                                              ArrayList target = new ArrayList();
                                                                     @Override
                                                                     public Object invoke(Object proxy, Method method, Object[] args)
                                                                                     throws Throwable {
                                                                             

                                                                             long beginTime = System.currentTimeMillis();
                                                                             method.invoke(target, args);
                                                                             long endTime = System.currentTimeMillis();
                                                                             System.out.println("运行时间为:"+(endTime - beginTime));
                                                                             return method.invoke(target, args);
                                                                     }
                                                             });
                           proxy3.add("12");
                          proxy3.add("12");
                          proxy3.add("12");
                          System.out.println("长度是:"+proxy3.size());
张孝祥老师课上打印的是3,我的怎么打印出来是6,求高手讲解一下?


作者: 极限冰风    时间: 2013-9-18 12:08
你那里是不是调用了两次invoke这个方法;每调用一次这个方法就会执行一次add方法所以你那里就等于在集合里面添加了6个对象;
作者: 白磊    时间: 2013-9-18 14:40
你最好return的那一句又调用了一次invoke方法,所以刚好翻倍。
public static void main(String[] args) {

                Collection proxy3 = (Collection) Proxy.newProxyInstance(
                                Collection.class.getClassLoader(),
                                new Class[] { Collection.class }, new InvocationHandler() {
                                        ArrayList target = new ArrayList();
                                        @Override
                                        public Object invoke(Object proxy, Method method,
                                                        Object[] args) throws Throwable {
                                                long beginTime = System.currentTimeMillis();
                                                Object obj = method.invoke(target, args);
                                                long endTime = System.currentTimeMillis();
                                                System.out.println("运行时间为:" + (endTime - beginTime));
                                                return obj;
                                        }
                                });
                proxy3.add("12");
                proxy3.add("12");
                proxy3.add("12");
                System.out.println("长度是:" + proxy3.size());
        }
作者: Kurt_cobain    时间: 2013-9-18 17:25
invoke方法的问题呀.调用了两次呢




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