黑马程序员技术交流社区
标题:
关于代理中的getClass()显示问题
[打印本页]
作者:
早知道
时间:
2013-9-28 09:47
标题:
关于代理中的getClass()显示问题
今天做代理的练习,发现getClass()的显示没弄清楚。
<P>public class Test14 {
public static void main(String[] args) throws Exception {
Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
Constructor con = clazzProxy.getConstructor(InvocationHandler.class);
Collection obj = (Collection)con.newInstance(new InvocationHandler(){
private List target = new ArrayList();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
return method.invoke(target, args);
}
});
obj.add(1);
obj.add(2);
System.out.println(obj.size());//代理的调用最后都是由目标实现的
System.out.println(obj.getClass());//如果按上面的说法理解,这会得出ArrayList 但最后打印的是 class $$$$Proxy0</P>
<P> }</P>
<P>}</P>
复制代码
视频看了好几次,终于明白了。原来调用代理对象从Object类继承的方法时,除了hashCode,equals和toString方法会转发给InvocationHandler对象外,对于其他方法,则不转发调用请求。即getClass()是代理类自己实现的,应该是为了证明代理的存在。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2