3

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

if (ssl)
{
    conn = (HttpsURLConnection) new URL(...).openConnection();
    conn.setHostnameVerifier(...);
}
else
{
    conn = (HttpURLConnection) new URL(...).openConnection();
}

当“conn”是 HttpsURLConnection 类型时,HttpURLConnection 转换失败。当“conn”的类型为 HttpURLConnection 或 URLConnection 时,“setHostnameVerifier”和其他 HTTPS 相关方法无法访问。

鉴于 HttpsURLConnection 是 HttpURLConnection 类的子类,我认为强制转换它会起作用,但我显然错了。有什么方法可以让这段代码工作,以便我可以在需要时访问 HTTPS 方法?

4

2 回答 2

7

只需在块中保留并conn创建URLConnection更具体的本地引用if

URLConnection conn;

// ...

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

// ...

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

// ...

要不就

// ...

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

// ...

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

于 2012-08-01T16:05:26.520 回答
1

试试这个:

((HttpsURLConnection) new URL(...).openConnection()).setHostnameVerifier(...);
于 2012-08-01T16:06:19.183 回答