2012-10-12 34 views

回答

4

恕我直言,总的来说,Java避免了类型推断。

在任何情况下,<>仅在编译器不需要知道使用哪种通用类型时才有效。对于匿名类,需要提供实际类型,因为编译器不会推断类型。

实际上,<>关闭了类型检查,而不是提供类型推断。匿名类存储实际的泛型类型,因此您必须提供它。

List<String> a = new ArrayList<>() 

很像

@SuppressWarnings("unchecked") 
List<String> a = new ArrayList() 

但一个匿名子类,编译器需要给它一个泛型类型。

+1

+1嗯,我绝对相信'<>'是关于推理!它用于工厂方法的方式。 –

+2

+1完美解释 – AlexR

+1

钻石并非原始打字。它会进行类型推断和类型检查。 – irreputable