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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路西法 中级黑马   /  2014-3-19 09:55  /  1788 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
public static void main(String[] args) {                final ArrayList target = new ArrayList();//匿名内部类不能引用外部类中非final类型的变量。
                List  proxy =(List)Proxy.newProxyInstance(//为甚么这里要用List而不是ArrayList
                                List.class.getClassLoader(), //还有这里
                                ArrayList.class.getInterfaces(),//这里为甚又用ArrayList
                                new InvocationHandler() {

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

3 个回复

倒序浏览
1.因为newProxyInstance方法返回的的Object类型对象,proxy这个引用变量是List类型的,所以你要把的它的返回值赋值给proxy时需要进行类型强转,转换成List;
2.这个参数是为了获取类加载器,为了保证代理类的类加载器和目标类的类加载器一直,所以这个使用了List.class.getClassLoader()也可以使用ArrayList来获取,只要保证它们的加载器是一直的;
3.由于代理类要和目标类要实现相同的接口,为了的获取相同的方法声明,ArrayList实现的接口是List,代理类也要实现这个接口,获取到这个接口中的方法声明,所以这里面使用ArrayList.class.getInterfaces()获取Arraylist实现的接口;
我也是初学代理不知道说的准不准确,我是这么理解的,希望可以能和高人们交流一下

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
梵天的梦 发表于 2014-3-19 11:23
1.因为newProxyInstance方法返回的的Object类型对象,proxy这个引用变量是List类型的,所以你要把的它的返 ...

谢谢,总结的很好哎
回复 使用道具 举报
梵天的梦 发表于 2014-3-19 11:23
1.因为newProxyInstance方法返回的的Object类型对象,proxy这个引用变量是List类型的,所以你要把的它的返 ...

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