Я немного смущен этим сценарием:
У меня есть класс, который реализует интерфейс 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();
}
Теперь проблема в том, что «invoke» выдает ошибку вроде:
...
в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 (прокси);
ЕслиЯ комментирую эту строку, все работает отлично.
Может кто-нибудь объяснить мне, в чем проблема?
NB В документации Java говорится о методе invoke от InvocationHandler:
Обрабатывает вызов метода на экземпляре проксии возвращает результат.Этот метод будет вызываться в обработчике вызова, когда метод вызывается для экземпляра прокси, с которым он связан.
Параметры: proxy - экземпляр прокси, для которого был вызван метод
... поэтому я не могу понять, почему это идет не так ...