在同一个变量中支持HttpURLConnection和HttpsURLConnection?

Rsa*_*sha 3 java http

我正在创建一个处理HTTP连接的类,我想处理HTTP和HTTPS,但是使用相同的变量(所以我可以使用相同的代码来发送数据等).目前,我的代码看起来像这样:

if (ssl)
{
    conn = (HttpsURLConnection) new URL(...).openConnection();
    conn.setHostnameVerifier(...);
}
else
{
    conn = (HttpURLConnection) new URL(...).openConnection();
}
Run Code Online (Sandbox Code Playgroud)

当"conn"的类型为HttpsURLConnection时,HttpURLConnection强制转换失败.当"conn"类型为HttpURLConnection或URLConnection时,"setHostnameVerifier"和其他HTTPS相关方法不可访问.

鉴于HttpsURLConnection是HttpURLConnection类的子类,我认为它会起作用,但我显然是错的.有没有办法使这个代码工作,以便我可以在需要时访问HTTPS方法?

Bal*_*usC 7

只要保持conn一个URLConnection创造在一个更具体的本地参考if块.

URLConnection conn;

// ...

conn = new URL(...).openConnection();

// ...

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
    httpsConn.setHostnameVerifier(...);
}

// ...
Run Code Online (Sandbox Code Playgroud)

要不就

// ...

if (conn instanceof HttpsURLConnection) {
    ((HttpsURLConnection) conn).setHostnameVerifier(...);
}

// ...
Run Code Online (Sandbox Code Playgroud)

请记住,在Java中,您处理的是引用,而不是值.所以这里没有创建副本.