当您在不指定对象类型的情况下创建 ArrayList 时,它会在您添加第一个对象时自动创建它吗?
Posted
技术标签:
【中文标题】当您在不指定对象类型的情况下创建 ArrayList 时,它会在您添加第一个对象时自动创建它吗?【英文标题】:When you make an ArrayList without specifying the object type, does it create it automatically when you add the first object? 【发布时间】:2011-04-25 14:14:03 【问题描述】:例如,而不是做
ArrayList<ClassName> variableName;
你会的
ArrayList variableName;
然后你添加一个“ClassName”类型的对象
variableName.add(objectName);
会自动将你的数组类型设置为
ArrayList<ClassName>
?
【问题讨论】:
见download.oracle.com/javase/tutorial/java/generics/generics.html和download.oracle.com/javase/tutorial/java/generics/erasure.html 【参考方案1】:没有。泛型仅用于编译时。您只是失去了该检查的好处。在运行时,所有通用信息都会被删除
换句话说,
ArrayList<Type>
在运行时只是一个 ArrayList。对 List 这样做的好处是,当您编写代码时,编译器会检查您没有在列表中放入任何不合适的内容。
【讨论】:
【参考方案2】:如果不指定,则与指定 ArrayList
【讨论】:
我会说语义上 ArrayList ninjalj:那你会怎么称呼 ArrayList> ?我会称之为“这个列表包含可能任何类型的对象”,而 ArrayList【参考方案3】:真正的类型真的是ArrayList
。 ArrayList<ClassName>
类型只存在于编译器(这称为擦除),其目的是在编译器级别提供类型安全。但是在字节码级别,您没有泛型类型的知识。
【讨论】:
以上是关于当您在不指定对象类型的情况下创建 ArrayList 时,它会在您添加第一个对象时自动创建它吗?的主要内容,如果未能解决你的问题,请参考以下文章