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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 为爱编程 中级黑马   /  2014-7-25 11:05  /  1111 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 为爱编程 于 2014-7-27 09:06 编辑

代理类创建的第三种方式:

List<String> listProxy = (List<String>)Proxy.newProxyInstance(loader, interfaces, h)

newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
          返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。

谁能帮我解释一下 newProxyInstance的第二个参数Class<?>[] interfaces的具体含义啊,我只知道是一个以接口为参数的类数组。比如要建立ArrayList的代理类,这个参数应该是什么???

7 个回复

倒序浏览
这个接口参数取决你你的InvacationHandler中的方法调用是用的哪个接口中的方法。如果仅仅只用到了Collection中的方法,你的接口参数就可以只写Collection。如果都会用到,就把所有的接口参数都写上。用getInterfaces就行。
回复 使用道具 举报
lei 发表于 2014-7-25 16:03
这个接口参数取决你你的InvacationHandler中的方法调用是用的哪个接口中的方法。如果仅仅只用到了Collectio ...

那如果是要建立ArrayList的代理类,这第二个参数应该是什么???
回复 使用道具 举报
为爱编程 发表于 2014-7-25 19:59
那如果是要建立ArrayList的代理类,这第二个参数应该是什么???

一般来说就是:ArrayList.class.getInterfaces()。
你也可以写:Collection.class
这个就取决于你代理类中会使用到的ArrayList中的方法有哪些。如果仅仅使用到Collection中的方法,那第一种和第二种都可以,如果还有其他的,就用第一种。
回复 使用道具 举报
lei 发表于 2014-7-25 20:31
一般来说就是:ArrayList.class.getInterfaces()。
你也可以写:Collection.class
这个就取决于你代理类 ...

new Class[]{ArrayList.class.getInterfaces()},      不对啊,我在eclipse中输入这句话,结果报错:“Type mismatch: cannot convert from Class<?>[] to Class”
回复 使用道具 举报
为爱编程 发表于 2014-7-25 21:18
new Class[]{ArrayList.class.getInterfaces()},      不对啊,我在eclipse中输入这句话,结果报错:“Ty ...

ArrayList.class.getInterfaces()返回的本来就是一个Class数组了,你又把它当成元素放入一个Class
数组中去,肯定会报错了~~~。你不需要new的!
回复 使用道具 举报
lei 发表于 2014-7-25 20:31
一般来说就是:ArrayList.class.getInterfaces()。
你也可以写:Collection.class
这个就取决于你代理类 ...

动态代理里这个地方我也没想明白,3Q
回复 使用道具 举报
lei 发表于 2014-7-27 09:32
ArrayList.class.getInterfaces()返回的本来就是一个Class数组了,你又把它当成元素放入一个Class
数组中 ...

哦哦,了解了。是我太生搬硬套了。还是因为没有理解他们的实质啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马