【发布时间】:2013-07-22 11:33:30
【问题描述】:
我的代码中有一个非常奇怪的错误。我从项目开始就使用迭代器,我从来没有遇到过问题,但在这里我不明白发生了什么。
我有一个模型类
public class MyObject implements Serializable{
private static final long serialVersionUID = 1L;
private int field1;
private String field2;
private List<OtherObject> field3;
private Date field4
...
// + Getters and setters
// + Override equals method
}
带有 MyObject 类型参数的类
public class FooClass implements Serializable{
private static final long serialVersionUID = 1L;
private List<MyObject> list;
// + getters and setters
}
我还有一个使用 MyObject 的类
public class MyController {
.....
public static void AMethod(FooClass value) {
List<MyObject> myList = value.getList();
Iterator<MyObject> iterator = myList.iterator();
while(iterator.hasNext()) {
MyObject temp = iterator.next(); // error on this line
}
}
...
}
我的对象使用以下代码显示在 JSF 视图中:
<p:selectCheckboxMenu value="#{fooClass.list}">
<f:selectItems value="#{fooClass.listAll}" var="obj"
itemValue="#{obj}" itemLabel="#{obj.field2}" />
</p:selectCheckboxMenu>
这是我得到的错误:
java.lang.ClassCastException: java.lang.String cannot be cast to com.MyObject
大家有什么建议吗?
【问题讨论】:
-
报错说明List包含String类型,你正在尝试强制转换为“MyObject”
-
您是否不小心将 Fooclass.list 用作原始
List某处?这将允许您向myList插入一个字符串。 -
您显示的代码不能抛出该异常。其他地方有问题。你如何填充
FooClass.list? -
能否提供完整代码?似乎您正在列表中添加字符串元素,因此出现异常。
-
事实上,我正在使用 JSF 填写此列表。合成器是一个primefaces selectCheckboxMenu。因此,如果它包含一个字符串,则来自这里。我会这样搜索。
标签: java jsf iterator classcastexception