gpt4 book ai didi

java - java.lang.reflect.InitationHandler 的调用方法参数列表中的 "proxy"对象代表什么?

转载 作者:行者123 更新时间:2023-12-01 19:15:15 25 4
gpt4 key购买 nike

我对这种情况有点困惑:

我有一个类,它实现了标题中提到的 InvocableHandler 接口(interface),该类如下所示:


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”抛出如下错误:

...

at rtti.SimpleProxy.invoke(MainClass.java:81)

at rtti.$Proxy0.toString(Unknown Source)

at java.lang.String.valueOf(String.java:2826)

at java.io.PrintStream.println(PrintStream.java:771)

at rtti.SimpleProxy.invoke(MainClass.java:81)

at rtti.$Proxy0.toString(Unknown Source)

at java.lang.String.valueOf(String.java:2826)

at java.io.PrintStream.println(PrintStream.java:771)

...

因为这一行:

System.out.println(proxy);

如果我评论这一行,一切都会正常。

谁能帮我解释一下这是什么问题吗?

注意在 Java 文档中,它介绍了 InvocableHandler 的调用方法:

Processes a method invocation on a proxy instance and returns the result. This method will be invoked on an invocation handler when a method is invoked on a proxy instance that it is associated with.

Parameters:proxy - the proxy instance that the method was invoked on

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

最佳答案

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

关于java - java.lang.reflect.InitationHandler 的调用方法参数列表中的 "proxy"对象代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com