new LinkedList<>() 与 new LinkedList() 有何不同

ewo*_*wok 3 java generics

我只是偶然发现编译器对这两个术语的处理方式不同。当我输入:

LinkedList<String> list = new LinkedList();
Run Code Online (Sandbox Code Playgroud)

我收到有关原始类型的编译器警告。然而:

LinkedList<String> list = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)

删除警告。在我看来,这两个语句的意思基本相同(即创建一个没有指定对象类型的新 LinkedList)。那么为什么编译器都拥有空泛型呢?这里有什么区别?

Pla*_*ure 5

这些陈述根本不是同一回事。

第一条语句尝试将无类型的类型LinkedList放入声明的泛型中LinkedList<String>并适当地抛出警告。

第二个语句在 Java 1.7 及以后的版本中有效,它使用类型推断通过使用声明类型的类型参数来猜测类型参数。此外,有时 this 可用于方法调用。然而,它并不总是有效。

有关更多信息,请参阅此页面