在Java中创建一个新的对象初始化列表 - 初始化

时间:2017-06-13 14:20:46

标签: java arraylist

我注意到当我创建一个任何特定类型对象的数组列表时,我需要像这样初始化它:

List<Object> objectList = new ArrayList<Object>();

为什么我必须初始化包含Object的右侧?即,为什么我不能在不再识别Object类的情况下初始化它? - 比如

List<Object> objectList = new ArrayList<>();

如果可以的话,为什么我可以这样做以及以这种方式做到这一点的好处(或其中的损失)是什么?

我研究了这个,我发现的唯一的事情是包括第二个对象的初始化。我想知道这种结构的“原因”。

我知道(现在)这个问题有一个明确的答案(我在这里找到了 What is the point of the diamond operator in Java 7? ),但是我离开了这个因为在不知道术语'钻石'的情况下进行研究非常困难运算符”。

5 个答案:

答案 0 :(得分:1)

他们完全一样;如果你什么都不放,它将使用声明类。它通常被称为钻石操作员(你可以查找),虽然它不是操作员。

基本上如果你把它留空,并且它不是一个匿名的内部类(这将在Java 9中修复),它将使用声明类作为实例化类。由于泛型不是协变的,这通常是你想要的。

PS。它是在Java 7中引入的,如果您使用的是旧版本,则需要在尖括号内添加该类。

PPS。 Here's您需要知道的一切;)

答案 1 :(得分:1)

在Java 1.5中引入了泛型,并且在Java 1.7中引入了菱形运算符作为声明泛型类型的便捷方式。

在大多数情况下,在Java 1.7之上工作时,为了简洁起见,您将使用菱形运算符。在某些情况下,如果可读性保证在语句中显示泛型类型,您仍可以声明类型。

答案 2 :(得分:1)

从Java 7开始,您可以使用菱形运算符&lt;&gt;创建泛型。

while read -d ':' p; do
   echo "$p"
done <<< "$PATH:"

在JDK 7 +中是正确的。

答案 3 :(得分:0)

一般而言:

  • 的ArrayList&LT;对象&gt;特别是对象列表。
  • 的ArrayList&LT;&GT;是一个没有具体类型的列表(这意味着你无法添加 列表中的任何内容除了NULL)。

在你的情况下,他们都是平等的,因为你已经宣布了这种类型。

答案 4 :(得分:0)

可以使用这两个版本。缩短版本在2009年作为Java 7的一部分引入。这允许您通过保存重复的类型参数来编写更紧凑(和可读)的代码。