黑马程序员技术交流社区
标题:
在张老师讲动态代理那块我不太明白,问题在代码中
[打印本页]
作者:
heheka123
时间:
2014-4-23 10:45
标题:
在张老师讲动态代理那块我不太明白,问题在代码中
本帖最后由 heheka123 于 2014-4-23 10:49 编辑
class Demo12
{
public static void main(String[] args) throws Exception {
Collection myProxy = (Collection)Proxy.newProxyInstance(
Collection.class.getClassLoader(),
new Class[]{Collection.class},
new InvocationHandler() {
private ArrayList target = new ArrayList();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//问题在这,我想知道第一个参数Object proxy 是干嘛用的啊,在这个里面都没有上啊
//还有就是 return retVal 这个返回的结果是去哪了,干嘛的呢 我return null;就报错了
long beginTime = System.currentTimeMillis();
//代理调用的对象
Object retVal = method.invoke(target,args);
//结束时间
long endTime = System.currentTimeMillis();
System.out.println("运行时间:"+(endTime-beginTime));
return retVal;
//return null;
}
});
myProxy.add("xxx");
myProxy.add("yyy");
myProxy.add("zzz");
myProxy.add("www");
System.out.println("List的长度为:"+myProxy.size());
}
}
复制代码
作者:
欢欢
时间:
2014-4-23 12:21
本帖最后由 欢欢 于 2014-4-23 12:49 编辑
Object proxy 应该是调用这个方法的本类对象,
因为 method.invoke(target,args); 这个方法调用的是哪个方法还不确定,返回值类型亦不确定,所以不能将null强转为其他类型,所以报错。
作者:
hacket
时间:
2014-4-23 12:31
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html看看这里。
作者:
luoyang316
时间:
2014-4-23 12:36
重写了invoke方法,这个Object proxy没用到,是为了实现覆盖(要与祖先类中同名方法参数一致)、
覆盖,就是要求子类方法的签名(名称与参数),返回类型与祖先类的保持一致才能实现。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2