HashMap get(Object)总是返回String而不是其他Object

时间:2012-10-23 14:38:54

标签: java jsf

有一个问题只是让我感到困惑。我声明一个HashMap使用String作为Key,我自己的KWIKattribute作为Value。

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

我将对象放入其中,其中sgml_xml_tag是String,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

我知道这可能是我某处的一个简单的愚蠢错误,但我不知道它是什么。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

而不是

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

使用

KWIKattribute kattr = e.getValue();

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

那就是说,你得到这个错误很奇怪。首先,根本不需要施放到KWIKattribute。其次,如果attributes实际上是HashMap<String, KWIKattribute>,则不可能将String个对象存储为值。

答案 1 :(得分:0)

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

否则,如果您只对地图中的值感兴趣,您还可以迭代values-collection

for (KWIKattribute attr : attributes.values()){
  // Do your work with attr
}