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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Inspur 中级黑马   /  2013-9-18 10:52  /  1530 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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,求高手讲解一下?

评分

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

查看全部评分

3 个回复

倒序浏览
你那里是不是调用了两次invoke这个方法;每调用一次这个方法就会执行一次add方法所以你那里就等于在集合里面添加了6个对象;

评分

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

查看全部评分

回复 使用道具 举报
你最好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());
        }

评分

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

查看全部评分

回复 使用道具 举报
invoke方法的问题呀.调用了两次呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马