【问题标题】:Creating a new array list of objects-initialization in Java [duplicate]在Java中创建一个新的对象初始化数组列表[重复]
【发布时间】:2017-11-15 09:25:15
【问题描述】:

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

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

为什么我必须初始化包含对象的右侧?即,为什么我不能在不再次识别 Object 类的情况下对其进行初始化? - 喜欢

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

如果可以,我为什么可以这样做?这样做的好处(或损失)是什么?

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

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

【问题讨论】:

  • new ArrayList&lt;&gt;()

标签: java arraylist


【解决方案1】:

它们完全一样;如果你什么都不放,它将使用声明类。它通常被称为菱形运算符(你可以查一下),尽管它不是运算符。

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

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

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

【讨论】:

  • 钻石运算符?谢谢你的提示!让我看看,你可能会得到 +1!
  • 谢谢!我在这里找到了一个非常详细的解释stackoverflow.com/questions/4166966/…如果你不知道“钻石算子”这个词,这是一个变相的问题
  • 确实,通常很难研究一个您不知道名称的概念。我经常遇到这种情况,有时这个网站会有所帮助:symbolhound.com。它可以让您准确搜索您想要的内容;例如,尝试:symbolhound.com/?q=java+%3C%3E ;)
  • 谢天谢地,我们有像 SO 这样的资源,可以帮助我们找到正确的地方!这是一个非常简单的答案,但我花了很多时间研究无济于事。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    在 JDK 7+ 中是正确的。

    【讨论】:

    • 感谢有关仅在 jdk 7 中引入的花絮!
    【解决方案4】:

    一般:

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

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

    【讨论】:

    • 问题更具体地解决了右侧,包含或不包含说明符。 “钻石算子”这个词正是我想要的:)
    • 是的,钻石运算符.. 没有它的原始类型。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2019-11-21
      • 2017-05-07
      相关资源
      最近更新 更多