使用Java Proxy创建新的动态代理实例的方法具有如下签名.
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)throws IllegalArgumentException
我想知道为什么需要第二个参数接口? 如下例所示,这就是教程通常显示使用模式的方式:
Hello hello = new Hello();
IHello proxy = (IHello) Proxy.newProxyInstance(IHello.class.getClassLoader(),
new Class[] {IHello.class},
new HelloHandler(hello));
proxy.hello();
根据我的理解,我们使用类加载器来显示应该将代理对象解释为哪种对象.因此,它将属于我们为其提供了类加载器参数的类.在这种情况下,它应该具有与该类中定义的方法完全相同的方法,那么为什么我们还要为它提供第二个参数接口呢?
编辑: 我真正的好奇心在于,我们什么时候会为类加载器和接口使用不同的类?(A.class.getClassLoader()和new Class[]{B.class})从注释和实验代码中我知道这是可能的.然而,这些效果似乎没有任何变化(或使程序失败).那么,会不会出现应该使用不同类的情况呢?(不仅仅是可以).