Str*_*kop 2 java openjdk arraylist
我们收到了这个错误
java.lang.NullPointerException
at java.util.ArrayList.<init>(Unknown Source)
at de.mystuff.ExtendedArrayList.<init>(ExtendedArrayList.java:38)
Run Code Online (Sandbox Code Playgroud)
其中ExtendedArrayList:38是
new ArrayList(new ArrayCollection<E>(data));
Run Code Online (Sandbox Code Playgroud)
简而言之:ArrayList构造函数有时似乎会阻塞我们自己开发的Collection实现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);
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为如果没有数据我们的ArrayCollection.toArray()返回null.对于我们正在使用的1.5.0_09 Sun JDK/JRE实现,这个构造函数看起来很安全(并且毫无例外地工作).
但openJDK似乎只为unix世界发布.此代码是否也是Windows JRE的一部分?如果是这样,哪个版本?
注意:我知道我们必须修复我们的类,但我想确保我理解NullPointerException的原因.
为什么你认为返回null而不是返回零长度数组是合法的?
javadoc for List不允许这样做.因此,原因是所有其他JRE都做出了相同的假设.Sun实现在我的Mac上发布的消息来源肯定会做出这样的假设.
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |