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

时间:2017-11-21 12:52:50

标签: java list arraylist

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

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

2 个答案:

答案 0 :(得分:1)

在第二个示例中,Java假定类型为myObject。所以还有一种类型。

答案 1 :(得分:1)

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

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

然而,第二个示例使用Java 7中引入的菱形运算符<>)。它添加了类型推断并减少了赋值中的详细程度。

请参阅documentation

中的以下引用
  

您可以替换调用构造函数所需的类型参数   一个具有空集类型参数(<>)的泛型类的长度   因为编译器可以从上下文中推断出类型参数。这个   一对尖括号被非正式地称为钻石。

     

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

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

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

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