在Java中创建新的对象数组列表初始化

在Java中创建新的对象数组列表初始化,java,arraylist,Java,Arraylist,我注意到,当我为任何特定类型的对象创建数组列表时,我需要对其进行如下初始化: List<Object> objectList = new ArrayList<Object>(); List objectList=new ArrayList(); 为什么必须初始化包含对象的右侧?也就是说,为什么我不能在没有再次识别对象类的情况下初始化它像 List<Object> objectList = new ArrayList<>(); List obj

我注意到,当我为任何特定类型的对象创建数组列表时,我需要对其进行如下初始化:

List<Object> objectList = new ArrayList<Object>();
List objectList=new ArrayList();
为什么必须初始化包含对象的右侧?也就是说,为什么我不能在没有再次识别对象类的情况下初始化它像

List<Object> objectList = new ArrayList<>();
List objectList=new ArrayList();
如果我可以,为什么我可以这样做?这样做的好处(或损失)是什么

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


我知道(现在)这个问题有一个明确的答案(我在这里发现),但我留下这个问题是因为在不知道术语“钻石算子”的情况下,研究非常困难。

它们完全相同;如果不放置任何内容,它将使用声明类。它通常被称为菱形操作符(您可以查找它),尽管它不是操作符

基本上,如果您将其保留为空,并且它不是匿名内部类(这在Java9中是固定的),那么它将使用声明类作为实例化类。由于泛型不是协变的,这通常是您想要的

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


PPS。您需要了解的一切;)

它们完全相同;如果不放置任何内容,它将使用声明类。它通常被称为菱形操作符(您可以查找它),尽管它不是操作符

基本上,如果您将其保留为空,并且它不是匿名内部类(这在Java9中是固定的),那么它将使用声明类作为实例化类。由于泛型不是协变的,这通常是您想要的

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


PPS。您需要了解的一切;)

泛型是在Java 1.5中引入的,菱形操作符是在Java 1.7中引入的,作为声明泛型类型的一种方便方法


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

泛型是在Java 1.5中引入的,菱形运算符是在Java 1.7中引入的,作为声明泛型类型的一种方便方法


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

因为Java 7,您可以使用菱形运算符创建泛型

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

这在JDK 7+中是正确的。

因为Java 7可以使用菱形操作符创建泛型

 List<Object> objectList = new ArrayList<>();
List objectList=new ArrayList();
它在JDK 7+中是正确的。

通常:

  • ArrayList是一个对象列表
  • ArrayList是一个没有具体类型的列表(这意味着您不能添加 列表中的任何内容(空除外)
在您的情况下,它们都是相等的,因为您已经声明了类型。

通常:

  • ArrayList是一个对象列表
  • ArrayList是一个没有具体类型的列表(这意味着您不能添加 列表中的任何内容(空除外)

在您的情况下,它们都是相等的,因为您已经声明了类型。

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

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

diamond运算符?谢谢你的提示!让我看看,你可能会得到+1!非常感谢。我能在这里找到一个非常详细的解释,这是一个伪装的问题,如果你不知道“钻石操作员”这个术语。事实上,研究一个你不知道名称的概念通常是非常困难的。我经常发现自己处于这种情况下,有时这个网站会提供帮助:symbolhound.com。它让你准确地搜索你想要的东西;例如,请尝试:;)谢天谢地,我们有这样的资源,帮助我们找到正确的地方!这是一个非常简单的答案,但我花了很多时间研究却没有结果?谢谢你的提示!让我看看,你可能会得到+1!非常感谢。我能在这里找到一个非常详细的解释,这是一个伪装的问题,如果你不知道“钻石操作员”这个术语。事实上,研究一个你不知道名称的概念通常是非常困难的。我经常发现自己处于这种情况下,有时这个网站会提供帮助:symbolhound.com。它让你准确地搜索你想要的东西;例如,请尝试:;)谢天谢地,我们有这样的资源,帮助我们找到正确的地方!这是一个非常简单的答案,但我花了很多时间进行研究,但都没有结果。
new ArrayList()
new ArrayList()
这个问题更具体地说是解决了右侧,包括或不包括说明符。“钻石操作员”一词正是我想要的:)是的,钻石操作员。。如果没有它,它是原始类型。问题更具体地解决了右侧,是否包含说明符。“钻石操作员”一词正是我想要的:)是的,钻石操作员。。没有它,它是原始类型。谢谢你的花絮,关于只在jdk 7中引入!感谢您介绍仅在jdk 7中引入的花絮!