我在Android 2.3及更低版本上有一些奇怪的错误。
我有以下代码:
HashMap<Somekey, Object> data = new HashMap<Somekey, Object>();
data.put(somekey, "asdfdsafdsf");
String value = (String) data.get(somekey);
在最后一行我有ClassCastException: get(somekey)返回布尔值而不是 String 。此错误不仅出现在String类型中,还出现Integer和Double。
我不明白为什么,因为这段代码在android 4.0.3及更高版本上正常工作。
答案 0 :(得分:1)
即使您的代码正在运行(???),您的代码也是错误的,您应该修复它。也许在投射之前用instanceof检查类型。
你也可以这样做:
String value = data.get(somekey).toString();
答案 1 :(得分:1)
所以你没有将任何布尔/布尔值放入地图中?因为Somekey
可能有一个错误的hashCode()
实现,可能是所有相同的代码,而早期的HashMap实现可能有错误。
纯粹上面的代码,没有任何布尔值,无法传递错误。
答案 2 :(得分:1)
我已经尝试过您的代码并且可以正常运行:
Somekey somekey = new Somekey();
HashMap<Somekey, Object> data = new HashMap<Somekey, Object>();
data.put(somekey, "asdfdsafdsf");
String value = (String) data.get(somekey);
可能您没有创建java.util.HashMap
,而是自定义和错误的实现,例如:
public class HashMap<K, V> extends java.util.HashMap<K, V> {
@Override
public V get(Object key) {
return (V)(Object)true;
}
}