我已经打开了java.util.ArrayList源代码,我无法理解一件事:如果ArrayList被参数化,为什么elementData []数组的类型是Object?
public class ArrayList<E> extends ... {
.........
private transient Object[] elementData;
.........
public boolean add(E e) {/*More code*/}
}
问题:为什么不将elementData定义为:
private transient E[] elementData
*有什么优缺点?
答案 0 :(得分:1)
每次使用原始类型创建List时,如:
列出
<MyObject>
list = new ArrayList<MyObject>
();
构造函数将所有数据转换为必须是Object []数组的数组:
public ArrayList(Collection
<? extends E>
c){elementData = c.toArray(); ...
我认为这是因为ArrayList可以在没有原始类型的情况下进行初始化,例如on:
List list = new ArrayList();
list.add(new String("VALUE"));
list.add(new Integer("1"));
for (Object c : list) {
System.out.println(c.toString());
}
你可以在里面放置多种类型的对象。
此外,ArrayList使用
Arrays.copyOf(elementData,size);
管理一些操作,这将返回一个Object []。