java.util.ArrayList中的泛型

时间:2013-04-16 20:16:21

标签: java generics arraylist

我已经打开了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
*有什么优缺点?

1 个答案:

答案 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 []。

你也可以像Paul一样看看herehere