我正在创建一个处理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方法?
答案 0 :(得分:6)
保持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中,您处理的是引用,而不是值。所以这里没有创建副本。
答案 1 :(得分:1)
试试这个:
((HttpsURLConnection) new URL(...).openConnection()).setHostnameVerifier(...);