在Eclipse IDE中使用JDK 1.8时,以下行没有原始类型警告:
1)ArrayList<Double> d1 = new ArrayList<>();
但是有一个编译器警告:
2)ArrayList<Double> d2 = new ArrayList();
在句法上,唯一的区别是尖括号“&lt;&gt;”。但两种情况都不是实际指定的类型。如果尖括号为空,是Double
推断的类型吗?
答案 0 :(得分:1)
总之 - 是的。
空角括号(<>
)允许编译器推断泛型类型。正如the documentation所述:
只要编译器可以从上下文中推断出类型参数,就可以用一组空的类型参数(&lt;&gt;)替换调用泛型类的构造函数所需的类型参数。这对尖括号被非正式地称为钻石。
再次引用文档,与使用原始类型完全不同:
请注意,要在泛型类实例化期间利用类型推断,必须使用菱形。
答案 1 :(得分:0)
new ArrayList()
这会创建一个原始类型。可以使用未经检查的警告将原始类型分配给通用ArrayList<Whatever>
,因为它对类型系统确实不安全。
new ArrayList<>()
这会创建一个通用类型; type参数是从上下文推断出来的。