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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侠客梦的懒猫 中级黑马   /  2013-12-14 12:18  /  1253 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题1,

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

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


问题2:

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

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


评分

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

查看全部评分

3 个回复

倒序浏览
返回不是一个接口,这里只是用了多态:父类引用接收子类对象
关于代理类调用方法的问题,应该是这样:所有从父类Object继承来的方法中,只有hashCode、equals 或 toString执行时调用了invoke与调用add等方法一样;而其他从Objec继承来的方法在调用时都是调用的Proxy类自己的方法

评分

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

查看全部评分

回复 使用道具 举报
1,Collection是代理类和目标类的共同实现的接口。
2,invoke方法的返回值是Object,而在Object类中,只有一些方法有返回值
    比如:hashCode、equals、toString...
    在Object类中没有返回值的方法不会把方法名传递给invok方法的method作为参数。  
    add方法是目标类以及其实现的接口中的方法,返回值类型为boolean-->Object.

共同进步!{:soso_e141:}

评分

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

查看全部评分

回复 使用道具 举报
我貌似懂了,我原以为它是独立的,原来它是与我们的对象有关的,像我定义了一个ArrayList自然返回的是一个集合
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马