我正在尝试将一个hashmap包装到另一个类中,但我一直得到这个
Unhandled exception java.lang.ClassCastException: java.util.TreeMap cannot be cast
这很简单,不确定为什么Java会抱怨。这是包装器:
public class ResponseHeader extends HashMap<String, String> {
}
这是演员
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
// Save http headers
mResponseHeaders = (ResponseHeader)response.headers;
response.headers定义如下:
public final Map<String, String> headers;
我调查了这个帖子,但这不是我所寻求的。
Why does TreeSet throws ClassCastException
任何解释?谢谢!
补充说,我忘记了
private ResponseHeader mResponseHeaders = new ResponseHeader();
答案 0 :(得分:0)
实例字段headers
定义为
public final Map<String, String> headers;
您不能对headers
的类型做出任何进一步的假设,而不是它Map
; NetworkResponse
的实现可以自由决定使用的任何实现,只要它实现java.util.Map
- 它可以根据具体情况使用不同的实现,或者在下一版本的库中使用不同的实现,等等
但正如您从异常中看到的那样,实际上,此时NetworkResponse
正在使用java.util.TreeMap
作为headers
的实现。
您正试图将其投放到ResponseHeader
,HashMap
是headers
的子类(但这并不重要,即使{{} HashMap
也无法正常工作1}}是ResponseHeader
,因为您正试图转发headers
。
这实际上不是实例字段headers
引用的对象的正确类型。从您的问题中不清楚为什么您认为应该可以将ResponseHeaders
转换为HashMap
,但这是不可能的。
你说你正试图将HashMap包装到另一个班级&#34;。实际上,您正在扩展Map
,而不是将其包裹起来。如果扩展类,则创建一个新类型,该类型不等于您扩展的类型。也许您正在尝试向GUID
添加您想要的功能。有更好的方法来做到这一点。 (包装就是其中之一)