java - 为什么在ArrayList的构造中需要将类型转换为Object数组?

标签 java collections

  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);
}

这段代码是java.util.ArrayList的构造。 您可以在此处查看错误 6260652 的详细信息 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652

我的问题是如果我不转换类型,会出现什么问题?因为我认为如果 elementData 引用 subType 数组是完全可以的。

最佳答案

下面是一个示例,说明在没有进行相关转换的情况下可能会出现什么问题:

List<Object> l = new ArrayList<Object>(Arrays.asList("foo", "bar"));

// Arrays.asList("foo", "bar").toArray() produces String[], 
// and l is backed by that array

l.set(0, new Object()); // Causes ArrayStoreException, because you cannot put
                        // arbitrary Object into String[]

关于java - 为什么在ArrayList的构造中需要将类型转换为Object数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521147/

相关文章:

collections - MFC 容器中的 find_if 具有从 std::iterator 派生的迭代器

java - Java中有序集的任何实现?

java - 如何重用使用相同支持迭代器的集合?

java - 创建未知对象的集合

java - 如何停止android中默认出现软键盘

java - 如何增加工作周的日期?

java - jar 在 Windows 上运行但在 Ubuntu 上不运行

java - 为什么零长度字符总是保留在 java 正则表达式模式 a 的源字符串的末尾?

java - Collections Sort 对两个 ArrayLists 进行相同的排序

java如何将列表转换为子列表的映射如果元素