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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张伟 黑马帝   /  2011-12-27 09:29  /  1939 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Arraylist的代理怎么写

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

2 个回复

倒序浏览
就是写一个子类继承他  重写ArrayList中的所有方法
回复 使用道具 举报
//假设做一个ArrayList 的 添加提示的功能。 就是 在调用它的add方法的时候 输出一句 请检查类型.

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.*;
import java.util.*;
class ArrayListProxy implements  InvocationHandler...{
    Object list ;
   
    ArrayListProxy(Object list )...{
        this.list  = list;
    }
   
   
    public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable...{
        
        if(method.getName().equals("add"))...{
            //对特定方法代理
            System.out.println ("请检查类型.......befor:"+method.getName());
        }
        
        //对所有方法代理
        //System.out.println ("请检查类型.......befor:"+method.getName());
        Object o =  method.invoke(list,args);
        
        return o ;
        
    }
   
   
    public static Object factory(Object o )...{
        Class c = o.getClass();
        
        //用真实的对象来构造代理对象
        return Proxy.newProxyInstance(c.getClassLoader(),c.getInterfaces(),new ArrayListProxy(o));
    }
}

class TestDProxy...{
    public static void main(String[] args)...{
        ArrayList al = new ArrayList();
        List pro =  (List)ArrayListProxy.factory(al);
        
        
        pro.add("aaa");
        System.out.println (pro.size());
        
        
        
    }
}

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

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