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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎志文 中级黑马   /  2013-7-21 11:24  /  1130 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-21 23:04 编辑

要做某一个目标类的代理,必须和这个目标类实现相同的接口,但是代理类实现了这个相同的接口,也只是复写了接口中的方法而已,
目标类中的一些特有方法,代理类不也没办法得到么?那目标类中的特有方法,怎样去代理?
比如:我想代理ArrayList类,我去实现这个ArrayList类的接口Collection或者List,
List list = (List)Proxy.newProxyInstance(List.class.getClassLoader(), new Class[]{List.class}, handler),
这个动态代理类中也仅仅只有List接口中所有的方法,ArrayList类中的特有方法没法获取到。那这些特有方法就无法代理了么?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
可以通过反射获取目标类中的特有方法、、、、
回复 使用道具 举报
你生成动态代理类的时候要用到目标类对象的.就在InovketionHandle实现对象中建立目标对象来用,
回复 使用道具 举报
我觉得吧,你可以多传几个接口进去,把你想要方法所在的接口也传进去,因为第二个参数可以传多个接口的Class对象作为参数。
回复 使用道具 举报
杨兴庭 发表于 2013-7-21 11:57
可以通过反射获取目标类中的特有方法、、、、

不是很明白,能否说得详细些?
回复 使用道具 举报
代理类实现这个相同的接口,是为了让用户看到代理类可以完成目标类所要完成的操作,但实际真正执行的是这个代理类所引用的目标类的操作。正如你所说的,目标类中的一些特有方法,代理类是没办法得到的。但是,既然你要在目标类定义特有方法,那么说明这些方法并不是我们需要代理的方法,代理类也不能去代理这些方法,除非是接口中的方法。打个比方,我要买房子,中介就是代理,房地产公司是目标类。中介拥有房地产公司的引用,我找到了中介,相当于找到了房地产公司,也就可以买到房子了。这样我的目的就达到了。但房地产公司不仅仅可以卖房子给我,它还可以盖房子,这是它的特有方法。可我需要调用房地产公司盖房子这个特有方法吗?不需要。我只要去挑房子,然后买房子就可以了,不用关注其他的。希望对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马