黑马程序员技术交流社区

标题: 动态代理的问题 [打印本页]

作者: 胡智    时间: 2013-9-16 15:11
标题: 动态代理的问题
本帖最后由 胡智 于 2013-9-16 22:41 编辑

先上代码:
  1. ArrayList proxy = (ArrayList)Proxy.newProxyInstance(
  2.                                 ArrayList.class.getClassLoader(),
  3.                                 ArrayList.class.getInterfaces(),
  4.                                 new InvocationHandler() {
  5.                                         ArrayList target = new ArrayList();
  6.                                         public Object invoke(Object proxy, Method method, Object[] args)
  7.                                                         throws Throwable {
  8.                                                 Long startTime = System.currentTimeMillis();
  9.                                                 Object obj = method.invoke(target, args);
  10.                                                 Long costTime = System.currentTimeMillis()-startTime;
  11.                                                 System.out.println(method.getName()+"方法运行了"+costTime/1000+"秒");
  12.                                                 return obj;
  13.                                         }
  14.                                 });
复制代码
问题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