先贴上代码:
package com.itcast.day3;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
public class ProxyTest2 {
public static void main(String[] args) {
Collection proxy= (Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]{Collection.class}, new InvocationHandler() {
Collection target = new ArrayList();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long startTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
return retVal;
}
});
proxy.add("333");
proxy.add("555");
proxy.add("777");
System.out.println(proxy.size());
//?既然代理对象调用方法都回去执行InvocationHandler的invoke方法,为什么proxy.getClass()却没有去执行呢
//hashcode().equals(),和toString()这3个方法,其它的继承自Object的方法是不会去调用invoke的
System.out.println(proxy.getClass().getName());
}
}
问题我在代码中已经描述了,可以我有疑问的是既然这样的话,只有hashcode().equals(),和toString()3个方法回去执行invode的过程,那么为什么我之前的add()方法都有去执行invode方法啊?
|