0

我正在检索用户日期的映射,它的 dataMap 类型为HashMap<String, String>,它有这个键值对,字符串,byte[]大小为 6。

有没有人见过这个或知道该怎么做?

4

2 回答 2

2

您的代码有一些非常可疑的地方。

这些陈述暗示MappedRecord必须执行Map<String, String>

record = (MappedRecord) obj;
item = new HashMap<String, String>();
item.putAll(record);

但是你说这是插入一个值类型为的条目byte[]。这是可能的,但它必须意味着某处/以某种方式您之前已将该条目添加到您的MappedRecord对象中。为了实现这一点,您必须抑制或忽略“未经检查的转换”警告。

(请注意,putAll代码不会检查它添加的条目是否item具有正确的键和值类型。它不能!代码HashMap.putAll不知道参数类型应该是什么......由于类型擦除。相反,putAll代码假定实际键和值的类型是正确的。它们应该是......除非你忽略/抑制了警告。)

MappedRecord无论哪种方式,如果不查看类的代码以及创建其中MappedRecord包含虚假条目的实例的代码,我们将无法正确诊断此问题。

于 2012-09-30T04:09:12.840 回答
0

大概这是Java。

虽然声明声明HashMap<String, String>HashMap 应该是 String->String,但编译器中的静态类型检查并不是无懈可击的(因为它是一种附加到先前存在的语言上的 kluge)。

并且没有动态类型检查来确保 (A) 你真正拥有的 HashMap 是 a HashMap<String, String>,并且 (B) 有人没有将数组插入到 aHashMap<String, String>中。这是因为实际上您拥有的是 a HashMap<Object, Object>,因此无法实现任一动态检查。

于 2012-09-30T03:09:36.177 回答