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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-许鹏 中级黑马   /  2013-6-1 12:03  /  1872 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-许鹏 于 2013-6-1 18:54 编辑

代理类是面试时经常问到的知识点,虽然研究了一下,但是没有找到更多的资料,还是有点困惑的。比如创建一个代理类
Object obj=Proxy.newProxyInstance(Collection.class.getClassLoader,Collection.class,new InvocationHandler(){
        public  Objicet invoke(Object proxy,Method method,Object[] args){
                return null;
        }
});
invoke的里面三个参数是怎么作用于目标类的?返回的值是Object类型的,它是什么样的方式显示出来的呢?还有,如果代理类的方法在目标类不存在又会怎么处理呢?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

倒序浏览
我昨天刚看了张老师讲这一块,他是在eclipse里直接应用相关类,我只好看视频的时候自己查api,总之看的头大 现在只有模糊的概念,估计需要看三四遍  或则四五遍细细捋

顺便问lz,你能赶上20期吗?
回复 使用道具 举报
参数:
proxy - 在其上调用方法的代理实例
method - 对应于在代理实例上调用的接口方法的 Method 实例。Method 对象的声明类将是在其中声明方法的接口,该接口可以是代理类赖以继承方法的代理接口的超接口。
args - 包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为 null。基本类型的参数被包装在适当基本包装器类

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
我的理解:
invoke里面的三个参数本身就来自目标类。
比如说你创建了一个ArrayList的代理proxy,然后调用ArrayList的的add("abc")方法时,proxy会将add ()和"abc"传递给它的构造函数所接收的invocationHandler的实现类复写的invoke方法。此时
public  Objicet invoke(Object proxy,              proxy 即为ArrayList的代理类
Method method,                                        method为add()
Object[] args                                             参数args为"abc"
)
所以不会存在代理类的方法在目标类不存在的情况了。
返回值object与add()方法的返回值一致,即将invoke返回的object作为proxy.add()的返回值;

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
刘勇强 发表于 2013-6-1 12:15
我昨天刚看了张老师讲这一块,他是在eclipse里直接应用相关类,我只好看视频的时候自己查api,总之看的头大 ...

已经面试,没接到通知能不能进
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马