1

有一个问题让我很难过。我有一个 HashMap 声明使用字符串作为键和我自己的 KWIKattribute 作为值。

private HashMap<String, KWIKattribute> attributes = new HashMap<String, KWIKattribute>();

我将对象放入其中,其中 sgml_xml_tag 是一个字符串,而 kattr 是 KWIKattribute 的一个实例。

attributes.put(sgml_xml_tag, kattr);

当我尝试将值作为 KWIKattribute 取回时

for (Map.Entry<String, KWIKattribute> e : attributes.entrySet()) {
        String key = e.getKey();
        KWIKattribute kattr = (KWIKattribute) attributes.get(e.getKey());
}

抛出异常

javax.faces.el.EvaluationException: java.lang.ClassCastException: java.lang.String cannot be cast to com.northgrum.adt.kwik.model.KWIKattribute

我知道这可能是我在某个地方的一个简单的愚蠢错误,但我没有看到它是什么。有什么建议么?

4

2 回答 2

0

代替

KWIKattribute kattr = (KWIKattribute) attributes.get(e.getKey());

利用

KWIKattribute kattr = e.getValue();

您正在遍历地图的条目集。每个条目都包含一个键和与映射中该键关联的值。您可以直接从条目中获取值;没有必要像您那样在地图中查找它。

也就是说,您收到此错误很奇怪。首先,演员阵容KWIKattribute根本不需要。其次,如果attributes真的是 a HashMap<String, KWIKattribute>,则不可能有String对象作为值存储在其中。

于 2012-10-23T14:41:36.410 回答
0

Map.Entry用于迭代 Map 的入口集的 -class 有一个-method getValue()它将值返回给当前键。

否则,如果您只对 Map 中的值感兴趣,您还可以遍历values-collection

for (KWIKattribute attr : attributes.values()){
  // Do your work with attr
}
于 2012-10-23T14:41:43.030 回答