未处理的异常java.lang.ClassCastException:无法强制转换java.util.TreeMap

时间:2016-02-18 01:22:03

标签: java collections exception-handling treeset

我正在尝试将一个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();

1 个答案:

答案 0 :(得分:0)

实例字段headers定义为

public final Map<String, String> headers;

您不能对headers的类型做出任何进一步的假设,而不是它Map; NetworkResponse的实现可以自由决定使用的任何实现,只要它实现java.util.Map - 它可以根据具体情况使用不同的实现,或者在下一版本的库中使用不同的实现,等等

但正如您从异常中看到的那样,实际上,此时NetworkResponse正在使用java.util.TreeMap作为headers的实现。

您正试图将其投放到ResponseHeaderHashMapheaders的子类(但这并不重要,即使{{} HashMap也无法正常工作1}}是ResponseHeader,因为您正试图转发headers

这实际上不是实例字段headers引用的对象的正确类型。从您的问题中不清楚为什么您认为应该可以将ResponseHeaders转换为HashMap,但这是不可能的。

你说你正试图将HashMap包装到另一个班级&#34;。实际上,您正在扩展Map,而不是将其包裹起来。如果扩展类,则创建一个新类型,该类型不等于您扩展的类型。也许您正在尝试向GUID添加您想要的功能。有更好的方法来做到这一点。 (包装就是其中之一)

相关问题