Java URL.openConnection在不同环境中返回HttpsURLConnection的不同实例

Java URL.openConnection在不同环境中返回HttpsURLConnection的不同实例,java,url,networking,httpurlconnection,httpsurlconnection,Java,Url,Networking,Httpurlconnection,Httpsurlconnection,我正尝试使用以下代码片段在java中发出Https请求: 1. java.net.URL urlObject = new java.net.URL("/*my https url*/"); 2. javax.net.ssl.HttpsURLConnection HttpsURLConnection = (javax.net.ssl.HttpsURLConnection)urlObject.openConnection(); 在第2行的运行时,urlObject.openCo

我正尝试使用以下代码片段在java中发出Https请求:

1. java.net.URL urlObject = new java.net.URL("/*my https url*/");
2. javax.net.ssl.HttpsURLConnection HttpsURLConnection = (javax.net.ssl.HttpsURLConnection)urlObject.openConnection();
在第2行的运行时,
urlObject.openConnection()
返回
sun.net.www.protocol.https.DelegateHttpsURLConnection
的一个实例,该实例被类型转换为
javax.net.ssl.HttpsURLConnection
,工作非常好

但是,在其中一种环境中,这不起作用,并出现以下例外情况:

java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
第2行中的
urlObject.openConnection()
返回
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl
的实例,该实例不能键入
javax.net.ssl.HttpsURLConnection

有人能帮我理解为什么
urlObject.openConnection()
在不同的环境中返回不同类的不同实例吗。这与依赖关系等有关吗

其他信息:

  • 关于这一点,我已经阅读了其他答案。我在这里的目的是理解发生这种情况的根本原因,这在其他答案中没有得到足够的表达
  • 我发现的一个解决方法是使用
    com.sun.net.ssl.HttpsURLConnection con=(com.sun.net.ssl.HttpsURLConnection)urlObj.openConnection()代替第2行。但是
    com.sun.net.ssl.HttpsURLConnection
    实际上已经被弃用了
  • 另一个类似的解决方法是使用Http而不是Https,即使用
    java.net.HttpURLConnection=(java.net.HttpURLConnection)urlObject.openConnection()…但这并不能回答我关于问题实际发生原因的问题
  • 我正在使用openJdk 8

您尝试将其强制转换为javax.net.ssl.HttpsURLConnection有什么特别的原因吗?您可以使用基类URLConnection并执行操作。

您尝试将其强制转换为javax.net.ssl.HttpsURLConnection有什么特殊原因吗?您可以使用基类,URLConnection并执行操作。

我使用的方法如setRequestMethod和setRequestProperty不适用于URLConnection,但适用于javax.net.ssl.HttpSurlConnection我使用的方法如setRequestMethod和setRequestProperty不适用于URLConnection,但适用于javax.net.ssl.HttpsURLConnection