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

tru*_*ktr 22 java arrays types arraylist object

例如,而不是做

ArrayList<ClassName> variableName;
Run Code Online (Sandbox Code Playgroud)

你做

ArrayList variableName;
Run Code Online (Sandbox Code Playgroud)

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

variableName.add(objectName);
Run Code Online (Sandbox Code Playgroud)

会自动将数组的类型设置为

ArrayList<ClassName>
Run Code Online (Sandbox Code Playgroud)

hvg*_*des 38

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

换一种说法,

ArrayList<Type> 
Run Code Online (Sandbox Code Playgroud)

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


ste*_*tew 14

如果未指定,则与指定ArrayList <Object>的情况相同,这意味着可以将任何类型的对象添加到ArrayList中.在指定类时执行的类型检查是在编译时发生的,而不是在运行时发生的,所以它不可能按照你提出的方式工作(让它们在运行时确定更具体的类).


nin*_*alj 8

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