2011-12-15 31 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); 
} 

mã này là xây dựng java.util.ArrayList. bạn có thể kiểm tra chi tiết về lỗi 6260652, tại đây http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652tại sao cần phải chuyển đổi loại thành mảng Đối tượng trong Xây dựng của ArrayList?

câu hỏi của tôi là nếu tôi không chuyển đổi loại, vấn đề gì sẽ xảy ra? Bởi vì tôi nghĩ rằng nó hoàn toàn OK nếu elementData tham chiếu đến mảng subType.

Trả lời

12

Dưới đây là một ví dụ về những gì có thể đi sai mà không có sự chuyển đổi trong câu hỏi:

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[] 
Các vấn đề liên quan