Java:ArrayList初始化(2个代码行之间的差异)

时间:2012-02-29 15:05:51

标签: java arraylist

我希望我的问题听起来很愚蠢,但我想知道这两行之间的区别是什么:

(假设我创建了一个名为Cow的课程。)

ArrayList<Cow> c1 = new ArrayList<Cow>();

ArrayList<Cow> c2 = new ArrayList();

提前感谢您的解释。

2 个答案:

答案 0 :(得分:7)

目前,由于type erasure,基本上没有区别。第一种形式是首选;第二种形式使用原始类型,仅支持与旧版Java的向后兼容性。如果你使用它,一个好的编译器会给你警告。

正如the Java Language Specification, Third Edition, §4.8所解释的那样:

  

原始类型的使用仅允许作为遗留代码兼容性的让步。强烈建议不要在将通用性引入Java编程语言之后编写的代码中使用原始类型。 未来版本的Java编程语言可能会禁止使用原始类型。

(强调原文)。

答案 1 :(得分:1)

正如鲁赫克刚刚指出的那样,第一个是首选的,实际上在执行中并没有任何区别。

用更简单的词语解释: 在这两行中,您声明了一个 Cow 的列表 在第一行中,您使用 Cow 列表对其进行实例化。 在第二个中,您使用Object列表对其进行实例化( Cow Object 的子类)。

将它声明为列表接口 List

会更好
List<Cow> listOfCows = new ArrayList<Cow>();