有一个问题只是让我感到困惑。我声明一个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
我知道这可能是我某处的一个简单的愚蠢错误,但我不知道它是什么。有什么建议吗?
答案 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
}