所以我注意到做了类似的事情:
LinkedList list = new LinkedList();
给你一个编译器的警告,所以我总是被告知正确的方法是:
LinkedList<Integer> list = new LinkedList<Integer>();
但我注意到了
LinkedList<Integer> list = new LinkedList<>();
也没有发出警告,虽然我不太明白为什么。有人可以向我解释最后两个例子之间的区别,如果一个人比另一个例子更可取,无论是风格还是实际上?
答案 0 :(得分:3)
钻石
在Java SE 7及更高版本中,您可以替换所需的类型参数 使用一组空类型调用泛型类的构造函数 参数(&lt;&gt;),只要编译器可以确定或推断出 从上下文中键入参数。这对尖括号&lt;&gt;是 非正式地称钻石。例如,您可以创建实例 Box&lt;整数&gt;以下声明:
盒及LT;整数&GT; integerBox = new Box&lt;&gt;();
有关钻石的更多信息 符号和类型推断,请参阅类型推断。
答案 1 :(得分:2)
两个
LinkedList<Integer> list = new LinkedList<Integer>();
和
LinkedList<Integer> list = new LinkedList<>();
是等价的。当您使用'diamond'(<>
)时,编译器使用类型推断来确定您的意思类型。所以在这种情况下,因为它被分配给LinkedList<Integer>
类型的变量,所以它假定这是你想要创建的(你做的)。
答案 2 :(得分:1)
您在第一种情况下遇到未经检查警告的原因是您将Collection LinkedList
声明为Raw类型。术语“未选中”表示编译器没有足够的类型信息来执行必要的所有类型检查,以确保将来操作的类型安全。