提问人:Osama El-Ghonimy 提问时间:11/17/2023 最后编辑:Osama El-Ghonimy 更新时间:11/17/2023 访问量:71
抛出异常而不是返回。方法返回的实际类型是什么?
Throw exception instead of return. What is the actual type of method return?
问:
我正在从 Java 中的类中挖掘该方法,以找到它的实际返回类型。在 OpenJDK 中,其源代码为:openStream()
URL
public final InputStream openStream() throws java.io.IOException { return openConnection().getInputStream(); }
返回类型显然是一个 Object,其是一个抽象类。那么,这是声明的类型,返回对象的实际类型是什么?
我遵循了返回类对象的方法。我还按照它的源代码找到了 的返回。最后,我找到了这段代码:InputStream
openConnection()
URLConnection
getInputSteam()
public InputStream getInputStream() throws IOException { throw new UnknownServiceException("protocol doesn't support input"); }
我的问题是实际返回类型是什么,其中的实际返回类型是什么?getInputStream()
openStream()
答:
你知道,几年前我开始使用 Java 时(几乎)有这个确切的问题,只是我对 .java.awt.Graphics
请参阅对接口进行编程
这个想法是,你实际上不需要知道精确的类 - 任何实现接口的东西都可以换入或换出。这使得代码随着时间的推移更具适应性。
"...我的问题是
getInputStream
() 的实际返回类型是什么,这将是openStream()
的实际返回类型?
下面是使用 HTTPS 地址的示例。
使用调试过程,并在 URL#openStream 方法上放置断点。
而且,我的意思是实际的方法,而不是你的调用。
从这里开始,“单步执行”openConnection 方法。
然后,“单步执行”openConnection(URL) 方法。
这将转到 sun.net.www.protocol.https.Handler 类。
再次前进到 openConnection(URL, Proxy) 方法,该方法返回 sun.net.www.protocol.https.HttpsURLConnectionImpl 的新实例。
进一步遍历,您会发现通过 sun.net.www.protocol.https.DelegateHttpsURLConnection 类返回了 HttpsURLConnection 的实例。
评论
URLConnection
也是一个抽象类。 继续看。URLConnection