new ArrayList<String>() 和 new ArrayList() 之间的区别

zer*_*uno 5 java generics

两种声明有什么区别?

new ArrayList<String>();
new ArrayList();
Run Code Online (Sandbox Code Playgroud)

它们有效,但第二个返回警告。我不明白为什么。

ArrayList<String> arr我理解和之间的区别ArrayList arr,第一个启用类型检查控件。但是 和new ArrayList<String>()new ArrayList()?执行层面有什么区别吗?在控制方面我会失去什么?

kap*_*pex 3

在 Java 7 中,它可以自动检测类型,但您需要使用Diamond Operator

ArrayList<String> arr = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

它基本上是第一行的语法糖。如果没有菱形运算符,它是原始类型(非参数化泛型类型)。原始类型的存在是为了与不支持泛型的旧 Java 版本兼容,但在使用时会导致警告。

  • 尽管这是事实,但它并没有回答所提出的问题:“`ArrayList&lt;String&gt; arr = new ArrayList&lt;String&gt;()` 和 `ArrayList&lt;String&gt; arr = new ArrayList();` 之间有什么区别? ?”.. (2认同)