关于 ArrayList 源码中的构造函数里 Arrays.copyOf 的问题

2017-03-24 22:52:19 +08:00
 esolve

下面代码块我有点看不懂 为何要判断 elementData.getClass() != Object[].class ? 即便 elementData = Arrays.copyOf(elementData, size, Object[].class); 依然出现 elementData.getClass() != Object[].class 啊

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);
}
1680 次点击
所在节点    问与答
5 条回复
wwqgtxx
2017-03-24 23:01:11 +08:00
他源代码既然提到了 issue 6260652 你不不打算看看源 issue 提到的问题所在么
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
wwqgtxx
2017-03-24 23:02:12 +08:00
esolve
2017-03-24 23:19:10 +08:00
@wwqgtxx 没看懂,意思是 Arrays.copyOf(elementData, size, Object[].class)能强制的把 String 类型元素变成 Object 类型, 从而使得 elementData.getClass()== Object[].class ?
wwqgtxx
2017-03-24 23:48:30 +08:00
的确可以
340244120
2017-03-25 08:53:21 +08:00
think in java 讨论 list 的章节提到过这个问题。 当时我试过, 1.7 有这问题, 1.8 解决了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350147

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX