2011-12-15 12 views
7
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なぜ型をArrayListの構造体のObject配列に変換する必要がありますか?

私はタイプを変換しないと問題は起こりますか?なぜなら、elementDataがsubType配列を参照していれば、まったく問題ないと思うからです。ここで

答えて

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[]