在jdk的文档里面看到这样一段代码请高手赐教:
     InvocationHandler handler = new MyInvocationHandler(...);
     Class proxyClass = Proxy.getProxyClass(
         Foo.class.getClassLoader(), new Class[] { Foo.class });
     Foo f = (Foo) proxyClass.
         getConstructor(new Class[] { InvocationHandler.class }).
         newInstance(new Object[] { handler });
这里后面的         Foo f = (Foo) proxyClass.
         getConstructor(new Class[] { InvocationHandler.class }).
         newInstance(new Object[] { handler });这个代码看不懂,为什么getConstructor()方法里面是InvocationHandler.class.我所知道的是Class.getConstructor()这个方法返回的是一个公共的构造方法,而里面的形参则是对应构造方法的参数。这里就很费解,因为实现Foo这个接口的类并没有带有InvocationHandler这样形参的构造方法?。还是我理解有问题,这里老是打转,不知道什么意思。

解决方案 »

  1.   

    这还是要从动态代理说起。
    问题不在你说的那一句,而在于Class proxyClass = Proxy.getProxyClass(
             Foo.class.getClassLoader(), new Class[] { Foo.class });因为getProxyClass得到的是一个动态代理类,这个类虽然是实现了Foo接口,但他实际上并不是Foo本身,
    而动态代理类的特性就是有一个接受 InvocationHandler 的构造函数,
    而动态代理类正是通过这个Handler才能实现真正的目标代码调用。
    详情参见:
    http://java.sun.com/j2se/1.4.2/docs/guide/reflection/proxy.html