【问题标题】:Initializing arraylist without object type - JAVA [duplicate]初始化没有对象类型的arraylist - JAVA [重复]
【发布时间】:2017-11-21 12:52:50
【问题描述】:

这个问题不是关于为什么我们将列表初始化为接口而不是实现,例如

List<myObject> obj = new ArrayList<myObject>();

问题是以下两者之间有什么区别以及为什么它们(显然)以相同的方式工作?

//list and arraylist both have a type
List<myObject> obj = new ArrayList<myObject>();

//arraylist does not have a type
List<myObject> obj = new ArrayList<>();

【问题讨论】:

标签: java list arraylist


【解决方案1】:

两段代码是等效的,并使用 type 创建ArrayLists(在您的示例中为myObject):

List<myObject> obj = new ArrayList<myObject>();
List<myObject> obj = new ArrayList<>();

但第二个示例使用 Java 7 中引入的 菱形运算符 (&lt;&gt;)。它增加了类型推断并减少了赋值的冗长。


请参阅documentation 中的以下引用:

您可以替换调用构造函数所需的类型参数 具有空类型参数集 (&lt;&gt;) 的泛型类 因为编译器可以从上下文推断类型参数。这个 一对尖括号被非正式地称为菱形。

例如,考虑以下变量声明:

Map<String, List<String>> myMap = new HashMap<String, List<String>>();

在 Java SE 7 中,您可以替换 具有一组空类型参数的构造函数 (&lt;&gt;):

Map<String, List<String>> myMap = new HashMap<>();

【讨论】:

    【解决方案2】:

    在您的第二个示例中,Java 假定类型是 myObject。所以还是有类型的。

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2012-04-27
      • 2018-09-04
      • 2012-01-17
      • 1970-01-01
      • 2023-03-17
      • 2019-05-28
      • 2020-02-14
      • 2011-05-11
      相关资源
      最近更新 更多