尝试扩展HttpURLConnection类时出错
我试图创建HttpURLConnection类的自定义版本。尝试扩展HttpURLConnection类时出错
类现在看起来是这样的:
package com.removed;
import java.net.HttpURLConnection;
import java.net.URL;
public abstract class MyHUC extends HttpURLConnection {
public MyHUC(URL url) {
super(url);
// TODO Auto-generated constructor stub
}
}
但是,当我打电话:
MyHUC connection = (MyHUC) url.openConnection();
我收到以下错误:
02-13 14:42:23.639: E/AndroidRuntime(4735): FATAL EXCEPTION: Thread-760
02-13 14:42:23.639: E/AndroidRuntime(4735): java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to com.removed.MyHUC
02-13 14:42:23.639: E/AndroidRuntime(4735): at com.removed.TVSlideActivity.DownloadFile(TVSlideActivity.java:603)
02-13 14:42:23.639: E/AndroidRuntime(4735): at com.removed.TVSlideActivity.access$9(TVSlideActivity.java:588)
02-13 14:42:23.639: E/AndroidRuntime(4735): at com.removed.TVSlideActivity$5.run(TVSlideActivity.java:337)
02-13 14:42:23.639: E/AndroidRuntime(4735): at java.lang.Thread.run(Thread.java:856)
这是推动我疯了,我一直在网上寻找一个解决方案几个小时,现在任何专家都可以启发我吗?
谢谢!
在您当前的设置中,URL
类对您的自定义URL连接类一无所知。您拨打的电话将返回URLConnection
类型(恰好是HttpURLConnection
,但这是一个实现细节)。您不能将生成的连接投射到MyHUC
类型,因为它的不是一个。重要的是要记住未来。
因为它恰巧有是到指定URL
类的自定义URL连接类的方法。您必须利用其他构造函数来创建URL,并提供URLStreamHandler
。示例代码如下所示:
public class MyURLConnection extends HttpURLConnection {
public MyURLConnection(URL arg0) {
super(arg0);
}
@Override
public void disconnect() {
}
@Override
public boolean usingProxy() {
return false;
}
@Override
public void connect() throws IOException {
}
}
public class MyURLStreamHandler extends URLStreamHandler {
public MyURLStreamHandler() {
super();
}
@Override
protected URLConnection openConnection(URL arg0) throws IOException {
return new MyURLConnection(arg0);
}
}
而且使用这样的:
final URL url = new URL("http", "www.google.com", -1, "",
new MyURLStreamHandler());
final MyURLConnection conn = (MyURLConnection) url.openConnection();
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
url.openConnection()
没有返回MyHUC
类型的对象,所以你不能安全地将它转换为该类。请阅读上面的文章以掌握继承是如何工作的。
我明白了,即使这听起来怪我,因为它是提示HttpURLConnection的...感谢的孩子! – Wildcopper 2013-02-13 14:52:29
如果有疑问,请使用instanceof操作符,看看是否可以将一个对象转换为另一个对象 – 2013-02-13 14:56:13
非常感谢,这会好得多! 我现在唯一的问题是调用默认的“连接”和“断开”的方法......他们是抽象的方法... 我实际上喜欢HttpURLConnection默认情况下,然后只替换几个方法。 – Wildcopper 2013-02-13 14:50:12
@Wildcopper你以某种方式解决它? – serj 2016-11-30 14:35:57