黑马程序员技术交流社区
标题:
动态代理的问题
[打印本页]
作者:
胡智
时间:
2013-9-16 15:11
标题:
动态代理的问题
本帖最后由 胡智 于 2013-9-16 22:41 编辑
先上代码:
ArrayList proxy = (ArrayList)Proxy.newProxyInstance(
ArrayList.class.getClassLoader(),
ArrayList.class.getInterfaces(),
new InvocationHandler() {
ArrayList target = new ArrayList();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Long startTime = System.currentTimeMillis();
Object obj = method.invoke(target, args);
Long costTime = System.currentTimeMillis()-startTime;
System.out.println(method.getName()+"方法运行了"+costTime/1000+"秒");
return obj;
}
});
复制代码
问题1:为什么生成的动态代理proxy不能转换成ArrayList类型的,但是List类型的可以。
问题2:
InvocationHandler中的invoke方法用到3个参数,第一个是Object proxy,可是这个参数在方法中就没用到。那要传它干嘛?
作者:
gulup
时间:
2013-9-16 16:14
第一个问题,因为生成的代理类并不是ArrayList类型的,只是实现了ArrayList相同的接口。而该接口就是List,根据多态的特性,所以可以转型为List。
第二个,这个参数的确是没用到的。但只是你这个代理并没有用到,关于这个参数,可以百度下这个报数,有很多很详细的解释,手机发帖,就不写了。
作者:
胡智
时间:
2013-9-16 22:40
gulup 发表于 2013-9-16 16:14
第一个问题,因为生成的代理类并不是ArrayList类型的,只是实现了ArrayList相同的接口。而该接口就是List,根 ...
好的,谢了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2