gpt4 book ai didi

arraylist - ArrayList 的不同实现

转载 作者:行者123 更新时间:2023-12-02 06:11:41 26 4
gpt4 key购买 nike

我们遇到这个错误

java.lang.NullPointerException
at java.util.ArrayList.<init>(Unknown Source)
at de.mystuff.ExtendedArrayList.<init>(ExtendedArrayList.java:38)

ExtendedArrayList:38 在哪里

new ArrayList(new ArrayCollection<E>(data));

简而言之:ArrayList 构造函数有时似乎会阻塞我们自己开发的集合实现 ArrayCollection。

即使使用与分发给我们客户的完全相同的版本,我也无法在我的计算机上复制它。

但我不能 100% 确定他们使用的是我们提供的 JRE。所以,我用谷歌搜索了一些 ArrayList.java 源代码并找到了 openJDK 6b17 有这个

public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}

这是有道理的,因为如果没有数据,我们的 ArrayCollection.toArray() 将返回 null。对于我们正在使用的 1.5.0_09 Sun JDK/JRE 实现,此构造函数看起来很安全(并且无一异常(exception)地工作)。
但是 openJDK 似乎只为 unix 世界发布。此代码是否也是 Windows JRE 的一部分?如果是,是哪个版本?

注意:我知道我们必须修复我们的类,但我想确保我了解 NullPointerException 的原因。

最佳答案

为什么您认为返回 null 而不是返回零长度数组是合法的?

List 的 javadoc 不允许这样做。所以,原因是所有其他 JRE 都做出了相同的假设。我的 Mac 上 Sun 实现的已发布资源肯定做出了这个假设。

关于arraylist - ArrayList 的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com