【问题标题】:When you make an ArrayList without specifying the object type, does it create it automatically when you add the first object?当您在不指定对象类型的情况下创建 ArrayList 时,它会在您添加第一个对象时自动创建它吗?
【发布时间】:2011-04-25 14:14:03
【问题描述】:

例如,而不是做

ArrayList<ClassName> variableName;

你会的

ArrayList variableName;

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

variableName.add(objectName);

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

ArrayList<ClassName>

?

【问题讨论】:

标签: java arrays object types arraylist


【解决方案1】:

没有。泛型仅用于编译时。您只是失去了该检查的好处。在运行时,所有通用信息都会被删除

换句话说,

ArrayList<Type> 

在运行时只是一个 ArrayList。对 List 这样做的好处是,当您编写代码时,编译器会检查您没有在列表中放入任何不合适的内容。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我会说语义上 ArrayList 的意思是“这个列表可能包含任何类型的对象”,而 ArrayList 的意思是“这要么是遗留代码,要么我没有费心指定它的类型列表的元素到编译器”。
    • ninjalj:那你会怎么称呼 ArrayList> ?我会称之为“这个列表包含可能任何类型的对象”,而 ArrayList 将是“这个包含对象”..
    【解决方案3】:

    真正的类型真的是ArrayListArrayList&lt;ClassName&gt; 类型只存在于编译器(这称为擦除),其目的是在编译器级别提供类型安全。但是在字节码级别,您没有泛型类型的知识。

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多