2011-08-05 2 views
0

Я немного смущен этот сценарий:Что представляет собой объект «proxy» из списка параметров метода invoke в java.lang.reflect.InvocationHandler?

У меня есть класс, который реализует интерфейс 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 (Unknown Source)

на java.lang.String.valueOf (String .java: 2826)

на java.io.PrintStream.println (PrintStream.java:771)

на rtti.SimpleProxy.invoke (MainClass.java:81)

на RTTI . $ Proxy0.toString (Unknown Source)

на java.lang.String.valueOf (String.java:2826)

на java.io.PrintStream.println (PrintStream.java:771)

...

из этой линии:

System.out.println (прокси);

Если я прокомментирую эту строку, то работа прекрасна.

Может кто-нибудь объяснить мне, в чем проблема?

N.B. В документах Java говорится о вызове метода из InvocationHandler:

Обработает вызов метода на экземпляре прокси и возвращает результат. Этот метод будет вызываться в обработчике вызова, когда метод вызывается в экземпляре прокси, с которым он связан.

Параметры: прокси - прокси-экземпляр, что метод был вызван на

... так что я не могу понять, почему это происходит не так ...

ответ

4

System.out.println(proxy); неявно называют toString() на прокси-сервере, то есть вызвать прокси-метод.

+0

Да. Ты зажгла меня. Спасибо! – artaxerxe