写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.ArrayList;
- import java.util.List;
- public class test1 {
- public static void main(String [] args){
- final ArrayList target = new ArrayList();
- List list_Proxy = (List)Proxy.newProxyInstance(List.class.getClassLoader(),
- ArrayList.class.getInterfaces(),new InvocationHandler() {
- @Override
- public Object invoke(Object proxy, Method method,Object [] args) throws Throwable {
- long beginTime = System.currentTimeMillis();
- Thread.sleep(10);
- Object reVal = method.invoke(target, args);
- long endTime = System.currentTimeMillis();
- System.out.println(method.getName()+ " runing time is " + (endTime - beginTime));
- return reVal;
- }
- });
- list_Proxy.add("element1");
- list_Proxy.add("element2");
- list_Proxy.add("element3");
- list_Proxy.remove("element4");
- System.out.println(list_Proxy.toString());
- }
- }
复制代码 |
|