【发布时间】:2012-10-13 12:49:51
【问题描述】:
有一个问题让我很头疼。我有一个 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
我知道这可能是我在某个地方的一个简单的愚蠢错误,但我没有看到它是什么。有什么建议吗?
【问题讨论】:
-
你为什么不用
e.getValue()? -
JSF 是什么版本的?它与 JSF
javax.faces.el.EvaluationException相关联。我认为您发布的代码不相关。你可以发布堆栈跟踪吗? -
真正的问题是为什么你需要在调用
attributes.get()之后进行转换?如果它正在做我们都认为的那样,那么该方法无论如何都应该返回一个KWIKattribute引用。您是否有可能在本地范围内使用另一张地图遮蔽了attributes的声明? -
范围内没有其他地图。我在我的帖子中包含的实际上是我迄今为止唯一的代码(除了一些调试 println 语句),因为这个项目才刚刚开始。
-
但这不是发生异常的地方。堆栈跟踪应该会有所帮助。