小编典典

初始化没有对象类型的arraylist-JAVA

java

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

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<>();

阅读 243

收藏
2020-11-26

共1个答案

小编典典

这两段代码是等效的,并ArrayList使用 类型 创建s (myObject在您的示例中):

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



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

但是,第二个示例使用Java 7中引入的 菱形运算符<>)。它添加了类型推断,并减少了赋值的冗长性。


请参阅文档中的以下引用:

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

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

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

在Java SE 7中,可以用一组空的类型参数(<>)代替构造函数的参数化类型:

Map<String, List<String>> myMap = new HashMap<>();
2020-11-26