ClassCastException:java.lang.Object与com.company.base.BaseDocument不兼容

时间:2015-07-21 07:54:09

标签: java

我有一段必须符合JDK 1.4的代码。以下是获取运行时异常的代码段。

BaseDocument baseDocument = new BaseDocument();
baseDocument.setGuid("{somethinghere}");
List document = new ArrayList();
document.add(baseDocument);//runtime error 

例外:

java.lang.ClassCastException: [Ljava.lang.Object; incompatible with [Lcom.company.base.BaseDocument;

我不明白为什么我们不能将它转换为java对象(因为Object是java中所有类的父类)。

我正在使用IBM JDK 1.7版,Eclipse编译器设置设置为JDK 1.4

请解释我在这里做的错误。我知道泛型是标准,但它必须符合JDK 1.4 :(

提前致谢!

1 个答案:

答案 0 :(得分:3)

实际上,消息说:

 [Ljava.lang.Object; incompatible with [Lcom.company.base.BaseDocument;

[字符非常重要。显然,有些东西正在尝试将Object[]类型转换为BaseDocument[];即你在这里处理数组类型。

但是,我不知道这里究竟是什么导致了这个问题,因为(从表面上看),你发布的代码中不应该有BaseDocument[]的实例。此外,我不相信您声称该异常被抛出该行。以下是ArrayList.add方法(Java 6版本)的源代码:

 private transient Object[] elementData;

 public boolean add(E e) {
     ensureCapacity(size + 1);  // Increments modCount!!
     elementData[size++] = e;
     return true;
 }

将引用赋值给对象数组(Object[])不需要任何运行时类型检查,也不能抛出ClassCastException

如果您向我们展示了完整的堆栈跟踪,则诊断起来会更容易。