0

我在 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 及更高版本上正确运行。

4

3 回答 3

1

好吧,即使您的代码正在运行(???)您的代码是错误的,您应该修复它。也许通过在强制转换之前使用 instanceof 检查类型。

你也可以用肮脏的方式来做:

String value = data.get(somekey).toString();
于 2013-09-02T10:14:40.757 回答
1

所以你没有在地图中放入任何布尔值/布尔值?因为Somekey可能有错误的hashCode()实现,可能所有相同的代码,并且早期的 HashMap 实现可能有错误。

纯粹是上面的代码,没有任何布尔值,无法传递该错误。

于 2013-09-02T10:19:40.123 回答
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;
    }
} 
于 2013-09-02T10:19:49.993 回答