我对这种情况有点困惑:
我有一个实现标题中提到的 InvocationHandler 接口的类,类看起来像:
class SimpleProxy implements InvocationHandler{
private Object proxied;
public SimpleProxy(Object proxied) {
this.proxied = proxied;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(proxy);
return method.invoke(proxied, args);
}
}
让我们在我的“主要”方法中说我有:
public static void main(String[] args) {
consumer(new RealObject());
MyInterface proxy = (MyInterface)Proxy.newProxyInstance(MainClass.class.getClassLoader(), new Class[]{MyInterface.class}, new SimpleProxy(new MyInterfaceImpl()));
proxy.methodFromMyInterface();
}
现在的问题是“调用”会引发如下错误:
...
在 rtti.SimpleProxy.invoke(MainClass.java:81)
在 rtti.$Proxy0.toString(未知来源)
在 java.lang.String.valueOf(String.java:2826)
在 java.io.PrintStream.println(PrintStream.java:771)
在 rtti.SimpleProxy.invoke(MainClass.java:81)
在 rtti.$Proxy0.toString(未知来源)
在 java.lang.String.valueOf(String.java:2826)
在 java.io.PrintStream.println(PrintStream.java:771)
...
因为这条线:
System.out.println(代理);
如果我评论这条线,一切都很好。
谁能解释我有什么问题?
注意在 Java 文档中,它提到了 InvocationHandler 的调用方法:
处理代理实例上的方法调用并返回结果。当在与其关联的代理实例上调用方法时,将在调用处理程序上调用此方法。
参数:proxy - 调用该方法的代理实例
...所以我不明白为什么会出错...