黑马程序员技术交流社区
标题:
关于代理问题
[打印本页]
作者:
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