【问题标题】:Initialise ArrayList [duplicate]初始化 ArrayList [重复]
【发布时间】:2018-09-04 08:25:05
【问题描述】:

什么是最正确和推荐的java表达式:

new ArrayList<>();

或者

new ArrayList<String>();

我的问题适用于任何包含任何类型的Object(如Map)。

【问题讨论】:

  • new ArrayList&lt;String&gt;(); 在 java 7 之前是旧的,new ArrayList&lt;&gt;(); 在 java 7 之前是新的
  • @KYHSGeekCode 为什么安全?为什么不是钻石运算符?
  • @KYHSGeekCode 这完全是错误的!没有区别 - 请阅读钻石运算符的规范
  • @KYHSGeekCode 如果您将左侧类型保留为原始类型,则会看到警告。
  • @ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ 绝对。

标签: java arraylist


【解决方案1】:

第一种方法从 Java 7 开始有效,您不需要具有称为 Diamond Operator 的类型 init。

只要编译器可以从上下文推断类型参数,您就可以用一组空类型参数 () 替换调用泛型类的构造函数所需的类型参数。这对尖括号被非正式地称为菱形。

菱形运算符的目的是简化泛型类的实例化。所以为了简单起见,首选第一种方式。

【讨论】:

  • 请记住,编译器并不是无限智能的,因此您可能会遇到不得不求助于旧样式的极少数情况。
  • 当然,您可以随意在任何您认为可以提高可读性的地方包含类型信息,例如在一些深度嵌套的表达式中)。
【解决方案2】:

从 Java 7 开始,Diamond 运算符用于减少冗长。
如果你使用版本>=7,建议使用第一个。
通过this

【讨论】:

    【解决方案3】:

    来自 Java >= 7,没有一个比其他更好。编译器基本上会以相同的方式处理它们。

    在 Java 7 之前,您必须指定您的通用类型。

    List<String> myStrings = new ArrayList<String>();
    

    但是从 Java 7 开始,你可以这样做:

    List<String> myStrings = new ArrayList<>();
    

    编译器将为您的 Collection 找出正确的目标类型并注入您的 Collection。这叫Type Inference for Generic Instance Creation

    再一次,没有一个比另一个更好或推荐,这只是为了方便你的工作,这样你就可以少写代码。如果你是一个新的 Java 程序员,想要理解这门语言,你应该从 former 开始。如果您是一位经验丰富的程序员,您会选择后者

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2011-02-15
      • 2016-01-29
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多