黑马程序员技术交流社区

标题: 代理类的一点点问题 [打印本页]

作者: 侠客梦的懒猫    时间: 2013-12-14 12:18
标题: 代理类的一点点问题
问题1,

  Collection c= (Collection) constructor.newInstance(new InvocationHandler(){}}

为什么返回的就是 Collection,它是返回一个接口吗? 集合Collection


问题2:

我们使用代理的时候,如p.add(),它会调用一下invoke
后来张老师视频中讲到p.getClass()不会去调用invoke,说只有Hashmap,equal,等去调用,但是add并不在里面啊?

这究竟是咋回事了,期望大神降临,待拯救!!



作者: 風諾    时间: 2013-12-14 12:51
返回不是一个接口,这里只是用了多态:父类引用接收子类对象
关于代理类调用方法的问题,应该是这样:所有从父类Object继承来的方法中,只有hashCode、equals 或 toString执行时调用了invoke与调用add等方法一样;而其他从Objec继承来的方法在调用时都是调用的Proxy类自己的方法
作者: 王松松    时间: 2013-12-14 13:19
1,Collection是代理类和目标类的共同实现的接口。
2,invoke方法的返回值是Object,而在Object类中,只有一些方法有返回值
    比如:hashCode、equals、toString...
    在Object类中没有返回值的方法不会把方法名传递给invok方法的method作为参数。  
    add方法是目标类以及其实现的接口中的方法,返回值类型为boolean-->Object.

共同进步!{:soso_e141:}
作者: 侠客梦的懒猫    时间: 2013-12-15 16:42
我貌似懂了,我原以为它是独立的,原来它是与我们的对象有关的,像我定义了一个ArrayList自然返回的是一个集合




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