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

2022-09-01 12:37:37

例如,而不是做

ArrayList<ClassName> variableName;

是吗

ArrayList variableName;

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

variableName.add(objectName);

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

ArrayList<ClassName>

?


答案 1

不。泛型仅用于编译时。您只是失去了该检查的好处。在运行时,将擦除所有通用信息

换句话说,

ArrayList<Type> 

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


答案 2

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