使用HashMap构建String,Integer,Double的错误

时间:2013-09-02 10:06:54

标签: java android hashmap

我在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及更高版本上正常工作。

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;
    }
}