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

Cha*_*ong 8 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);
}
Run Code Online (Sandbox Code Playgroud)

代码是java.util.ArrayList的构造.你可以查看bug 6260652的详细信息,这里http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652

我的问题是,如果我不转换类型,会发生什么问题?因为我认为如果elementData引用subType数组就完全没问题了.

axt*_*avt 12

以下是没有问题转换可能出错的示例:

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[]
Run Code Online (Sandbox Code Playgroud)