黑马程序员技术交流社区
标题:
代理类能否代理目标类中的特有方法?
[打印本页]
作者:
黎志文
时间:
2013-7-21 11:24
标题:
代理类能否代理目标类中的特有方法?
本帖最后由 杨兴庭 于 2013-7-21 23:04 编辑
要做某一个目标类的代理,必须和这个目标类实现相同的接口,但是代理类实现了这个相同的接口,也只是复写了接口中的方法而已,
目标类中的一些特有方法,代理类不也没办法得到么?那目标类中的特有方法,怎样去代理?
比如:我想代理ArrayList类,我去实现这个ArrayList类的接口Collection或者List,
List list = (List)Proxy.newProxyInstance(List.class.getClassLoader(), new Class[]{List.class}, handler),
这个动态代理类中也仅仅只有List接口中所有的方法,ArrayList类中的特有方法没法获取到。那这些特有方法就无法代理了么?
作者:
杨兴庭
时间:
2013-7-21 11:57
可以通过反射获取目标类中的特有方法、、、、
作者:
黄基焜
时间:
2013-7-21 12:02
你生成动态代理类的时候要用到目标类对象的.就在InovketionHandle实现对象中建立目标对象来用,
作者:
王靖远
时间:
2013-7-21 12:51
我觉得吧,你可以多传几个接口进去,把你想要方法所在的接口也传进去,因为第二个参数可以传多个接口的Class对象作为参数。
作者:
黎志文
时间:
2013-7-21 13:51
杨兴庭 发表于 2013-7-21 11:57
可以通过反射获取目标类中的特有方法、、、、
不是很明白,能否说得详细些?
作者:
liuzhming
时间:
2013-7-21 18:07
代理类实现这个相同的接口,是为了让用户看到代理类可以完成目标类所要完成的操作,但实际真正执行的是这个代理类所引用的目标类的操作。正如你所说的,目标类中的一些特有方法,代理类是没办法得到的。但是,既然你要在目标类定义特有方法,那么说明这些方法并不是我们需要代理的方法,代理类也不能去代理这些方法,除非是接口中的方法。打个比方,我要买房子,中介就是代理,房地产公司是目标类。中介拥有房地产公司的引用,我找到了中介,相当于找到了房地产公司,也就可以买到房子了。这样我的目的就达到了。但房地产公司不仅仅可以卖房子给我,它还可以盖房子,这是它的特有方法。可我需要调用房地产公司盖房子这个特有方法吗?不需要。我只要去挑房子,然后买房子就可以了,不用关注其他的。希望对你有所帮助。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2