【问题标题】:Casting an URL object to HttpURLConnection将 URL 对象转换为 HttpURLConnection
【发布时间】:2015-03-30 10:50:27
【问题描述】:

我是 Java 新手,我仍在处理基本主题。通过调用 URL.openConnection() 并将结果转换为 HttpURLConnection 来获取新的 HttpURLConnection 时,我无法真正理解以下几行是如何工作的。

URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

如果 URL 类不继承自 HttpURLConnection,如何用 URL 对象实例化 HttpURLConnection?

根据 java API 参考,这是两个类的层次结构:

Java.lang.Object ⇒ java.net.URLConnection ⇒ java.net.HttpURLConnection

java.lang.Object ⇒ java.net.URL

据我所知,强制转换的使用方式如下:

在这种情况下,HttpURLConnection 是 URLConnection 和 Object 的后代。 所以,一个HttpURLConnection就是一个URLConnection,也是一个Object。

反过来不一定正确:URLConnection 可能是 HttpURLConnection,但不一定。所以你必须使用强制转换。

但是 URL 类和 HttpURLConnection 不相关。仅通过 OBJECT 类。

这是我无法理解的。有人可以帮我吗?

提前谢谢你。

【问题讨论】:

  • 有一个方法调用openConnection()检查它在文档中返回的内容...

标签: java android url casting httpurlconnection


【解决方案1】:

您不是在投射URL,而是在投射openConnection() (URLConnection) 的返回值,当地址以http:// 开头时,它在HttpURLConnection 的深处。

【讨论】:

    【解决方案2】:

    在 URL 类中,openConnection() 的声明如下:

    如果对于 URL 的协议(例如 HTTP 或 JAR),存在一个公共的、专门的 URLConnection 子类属于 到以下软件包之一或其子软件包之一: java.lang、java.io、java.util、java.net、连接 返回的将属于该子类。例如,对于 HTTP HttpURLConnection 将被返回,对于 JAR 将返回 JarURLConnection。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 2014-12-30
      • 2020-04-18
      • 2017-02-13
      • 2017-02-24
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多