例如,而不是做
ArrayList<ClassName> variableName;
你做了
ArrayList variableName;
然后你添加一个“ClassName”类型的对象
variableName.add(objectName);
会自动将数组类型设置为
ArrayList<ClassName>
答案 0 :(得分:38)
没有。泛型仅用于编译时。你只是失去了支票的好处。在运行时,所有通用信息都被删除
换句话说,
ArrayList<Type>
在运行时只是一个ArrayList。仅仅在List上执行此操作的好处是,当您编写代码时,编译器将检查您是否在列表中放置了不适当的内容。
答案 1 :(得分:13)
如果未指定,则与指定ArrayList&lt; Object&gt;相同,这意味着可以将任何类型的对象添加到ArrayList中。在编译时指定类时执行的类型检查发生在运行时,而不是在运行时,因此不可能按照您的建议工作(让它们在运行时确定更具体的类)。
答案 2 :(得分:8)
真实的类型真的是ArrayList
。 ArrayList<ClassName>
类型仅存在于编译器中(这称为擦除),其目的是在编译器级别提供类型安全性。但是在字节码级别,您没有泛型类型的知识。