我在代码中一直收到ClassCastException。目标最初是将Set转换为List,因为refreshDetailVOTable方法只会获得Set。问题可能在于将Set转换为List。 refreshDetailVOTable可能会使用错误的List,这就是我收到ClassCastException的原因。
经调查后发现:我一直在使用所有原始类型。我应该使用泛型来代替。它们将帮助在编译时发现这种错误。
该方法正在接收一个参数List detailIRsToDelete,我从中获得了一个迭代器并迭代了这样的元素:
for (Iterator iDetails = detailIRsToDelete.iterator(); iDetails.hasNext();) {
IdentifiableReference detailIR = (IdentifiableReference) iDetails.next();
我可能不小心将一些不同于IdentifiableReference的东西放入detailIRsToDelete中,从而在循环中的赋值语句中获得ClassCastException。
然后应将list参数声明为:
List <IdentifiableReference> detailIRsToDelete
编译器将检查将事物置于此列表中的行为,并且错误将在编译时添加错误对象的位置发生,而不是在运行时以后发生。
问题:这应解决Class Cast Exception,但是,这不能应用于当前的JRE,即1.4
除了升级之外,我们是否有针对JRE 1.4的任何解决方法?
答案 0 :(得分:-1)
您可以在尝试投射
之前使用instanceof
Object o = iDetails.next();
if(o instanceof IdentifiableReference)
IdentifiableReference detailIR = (IdentifiableReference)o;