ArrayList实例中的Java类型规范

时间:2015-09-21 21:42:02

标签: java eclipse generics arraylist

在Eclipse IDE中使用JDK 1.8时,以下行没有原始类型警告:

1)ArrayList<Double> d1 = new ArrayList<>();

但是有一个编译器警告:

2)ArrayList<Double> d2 = new ArrayList();

在句法上,唯一的区别是尖括号“&lt;&gt;”。但两种情况都不是实际指定的类型。如果尖括号为空,是Double推断的类型吗?

2 个答案:

答案 0 :(得分:1)

总之 - 是的。

空角括号(<>)允许编译器推断泛型类型。正如the documentation所述:

  

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

再次引用文档,与使用原始类型完全不同:

  

请注意,要在泛型类实例化期间利用类型推断,必须使用菱形。

答案 1 :(得分:0)

    new ArrayList()

这会创建一个原始类型。可以使用未经检查的警告将原始类型分配给通用ArrayList<Whatever>,因为它对类型系统确实不安全。

    new ArrayList<>()

这会创建一个通用类型; type参数是从上下文推断出来的。