在没有指定对象类型的情况下创建ArrayList时,是否在添加第一个对象时自动创建它?

时间:2010-10-14 18:55:51

标签: java arrays object types arraylist

例如,而不是做

ArrayList<ClassName> variableName;
你做了

ArrayList variableName;

然后你添加一个“ClassName”类型的对象

variableName.add(objectName);

会自动将数组类型设置为

ArrayList<ClassName>

3 个答案:

答案 0 :(得分:38)

没有。泛型仅用于编译时。你只是失去了支票的好处。在运行时,所有通用信息都被删除

换句话说,

ArrayList<Type> 

在运行时只是一个ArrayList。仅仅在List上执行此操作的好处是,当您编写代码时,编译器将检查您是否在列表中放置了不适当的内容。

答案 1 :(得分:13)

如果未指定,则与指定ArrayList&lt; Object&gt;相同,这意味着可以将任何类型的对象添加到ArrayList中。在编译时指定类时执行的类型检查发生在运行时,而不是在运行时,因此不可能按照您的建议工作(让它们在运行时确定更具体的类)。

答案 2 :(得分:8)

真实的类型真的是ArrayListArrayList<ClassName>类型仅存在于编译器中(这称为擦除),其目的是在编译器级别提供类型安全性。但是在字节码级别,您没有泛型类型的知识。