我有一段必须符合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 :(
提前致谢!
答案 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
。
如果您向我们展示了完整的堆栈跟踪,则诊断起来会更容易。