0

我一直在我的代码中收到 ClassCastException。最初的目标是将 Set 转换为 List,因为 refreshDetailVOTable 方法只会获取 Set。问题可能在于将 Set 转换为 List。refreshDetailVOTable 可能使用了错误的列表,这就是我收到 ClassCastException 的原因。

经过调查,发现:

我一直在使用所有原始类型。我应该改用泛型。他们将帮助在编译时发现这种错误。

该方法正在接收一个参数 List detailIRsToDelete,我从中获得了一个迭代器并像这样遍历元素:

         for (Iterator iDetails = detailIRsToDelete.iterator(); iDetails.hasNext();) {
             IdentifiableReference detailIR = (IdentifiableReference) iDetails.next();

我可能不小心将 IdentifiableReference 以外的其他内容放入 detailIRsToDelete,从而在循环内的赋值语句中获得 ClassCastException。

然后应将列表参数声明为:

List <IdentifiableReference> detailIRsToDelete

将事物放入此列表的行为将由编译器检查,并且错误将在编译时添加错误对象的位置发生,而不是像经验那样在运行时稍后发生。

问题:这应该解决 Class Cast Exception,但是,这不能应用于当前 JRE 1.4

除了升级之外,我们还有针对 JRE 1.4 的解决方法吗?

4

1 回答 1

-1

您可以instanceof在尝试投射之前使用

Object o = iDetails.next();
if(o instanceof IdentifiableReference)
  IdentifiableReference detailIR = (IdentifiableReference)o;
于 2013-12-11T02:56:45.950 回答