黑马程序员技术交流社区
标题:
对Proxy代理类的小小困惑
[打印本页]
作者:
黑马-许鹏
时间:
2013-6-1 12:03
标题:
对Proxy代理类的小小困惑
本帖最后由 黑马-许鹏 于 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类型的,它是什么样的方式显示出来的呢?还有,如果代理类的方法在目标类不存在又会怎么处理呢?
作者:
刘勇强
时间:
2013-6-1 12:15
我昨天刚看了张老师讲这一块,他是在eclipse里直接应用相关类,我只好看视频的时候自己查api,总之看的头大 现在只有模糊的概念,估计需要看三四遍 或则四五遍细细捋
顺便问lz,你能赶上20期吗?
作者:
骑上最爱
时间:
2013-6-1 12:54
参数:
proxy - 在其上调用方法的代理实例
method - 对应于在代理实例上调用的接口方法的 Method 实例。Method 对象的声明类将是在其中声明方法的接口,该接口可以是代理类赖以继承方法的代理接口的超接口。
args - 包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为 null。基本类型的参数被包装在适当基本包装器类
作者:
杨政
时间:
2013-6-1 13:15
我的理解:
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()的返回值;
作者:
黑马-许鹏
时间:
2013-6-1 13:26
刘勇强 发表于 2013-6-1 12:15
我昨天刚看了张老师讲这一块,他是在eclipse里直接应用相关类,我只好看视频的时候自己查api,总之看的头大 ...
已经面试,没接到通知能不能进
作者:
殇_心。
时间:
2013-6-1 18:07
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2