来自 java.lang.reflect.InvocationHandler 的 invoke 方法参数列表中的"proxy"对象代表什么?



我对这个场景有点困惑:

我有一个类实现了在标题中提到的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);
        
    }
    
}

在my "main"方法:


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调用方法:

处理代理实例上的方法调用并返回结果。当方法在与其关联的代理实例上被调用时,将在调用处理程序上调用此方法。

参数:代理——在

上调用方法的代理实例

…所以我不明白为什么会出错。

System.out.println(proxy);将隐式调用代理上的toString(),即调用被代理的方法。

最新更新