List cons2 = (List) Proxy.newProxyInstance(
List.class.getClassLoader(),
List.class.getInterfaces(),//问题1:有人说getInterfaces()方法获得的是该接口的父接口即Collection接口,是这样的吗?在张老师的演示中接口代理类直接是接口的class即List.class为什么编译都通不过?!
new InvocationHandler() {
ArrayList al = new ArrayList();
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// TODO Auto-generated method stub
long startTime = System.currentTimeMillis();
Object retVal = method.invoke(al, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + " run time is "
+ (endTime - startTime));
return retVal;
}
});
cons2.add("bxd");
cons2.add("qsl");
cons2.add("ly");
System.out.println(cons2.size());
//问题2,上面的代码就算问题一处编译通过了,为什么代理类对象必须是参数类加载器的父类接口才是正确的,张老师演示的全是Collection接口为什么就没问题,换成全List接口就会有问题,更别说ArrayList这样的实现类了。求解 |