未处理的异常 java.lang.ClassCastException:无法转换 java.util.TreeMap
Unhandled exception java.lang.ClassCastException: java.util.TreeMap cannot be cast
我正在尝试将哈希图包装到另一个 class 中,但我一直收到这个
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();
实例字段headers
定义为
public final Map<String, String> headers;
关于 headers
的类型,除了它是 Map
之外,您不能做任何进一步的假设; NetworkResponse
的实现可以自由决定使用什么实现,只要它实现了 java.util.Map
- 它可以根据情况使用不同的实现,或者在下一版本的库中使用不同的实现,等等.
但是从异常中可以看出,实际上,此时NetworkResponse
正在使用java.util.TreeMap
作为headers
的实现。
您正在尝试将其转换为 ResponseHeader
,它是 HashMap
的子class(但这没关系,即使 headers
是 HashMap
,因为您正试图转换为 ResponseHeader
。
这根本不是实例字段引用的对象的正确类型 headers
。从你的问题中不清楚为什么你认为应该可以将 headers
转换为 ResponseHeaders
,但这是不可能的。
你是说你正在尝试 "wrap HashMap into another class"。实际上,您是在扩展 HashMap
,而不是包装它。如果您扩展 class,您将创建一个新类型,它不等于您扩展的类型。也许您正在尝试向 Map
添加您想要的功能。有更好的方法可以做到这一点。 (包装就是其中之一)
我正在尝试将哈希图包装到另一个 class 中,但我一直收到这个
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();
实例字段headers
定义为
public final Map<String, String> headers;
关于 headers
的类型,除了它是 Map
之外,您不能做任何进一步的假设; NetworkResponse
的实现可以自由决定使用什么实现,只要它实现了 java.util.Map
- 它可以根据情况使用不同的实现,或者在下一版本的库中使用不同的实现,等等.
但是从异常中可以看出,实际上,此时NetworkResponse
正在使用java.util.TreeMap
作为headers
的实现。
您正在尝试将其转换为 ResponseHeader
,它是 HashMap
的子class(但这没关系,即使 headers
是 HashMap
,因为您正试图转换为 ResponseHeader
。
这根本不是实例字段引用的对象的正确类型 headers
。从你的问题中不清楚为什么你认为应该可以将 headers
转换为 ResponseHeaders
,但这是不可能的。
你是说你正在尝试 "wrap HashMap into another class"。实际上,您是在扩展 HashMap
,而不是包装它。如果您扩展 class,您将创建一个新类型,它不等于您扩展的类型。也许您正在尝试向 Map
添加您想要的功能。有更好的方法可以做到这一点。 (包装就是其中之一)