HashMap的声明是否应始终包含类型,例如
private HashMap<String, String> test = new HashMap<String, String>();
因为我在书中看到很多例子,其中遗漏了<String, String>
所以我们只有这样的内容:
private Map test= new HashMap();
哪一个'正确'?
答案 0 :(得分:10)
它应该看起来像
private Map<String, String> test = new HashMap<>();
因此两者的元素都是正确的。;)Map是定义行为的接口,而HashMap是一个提供行为的实现。
如果您想要更强的类型安全性,则应使用泛型参数。虽然它们不是绝对必要的,但它们在减少应用程序错误方面增加了很多价值。由于在Java 5中引入了泛型,因此之前的示例将不会显示泛型参数。
Java 7引入了"diamond operator" <> - 这意味着您可以将泛型类型说明符的第二次出现减少到&lt;&gt;。
答案 1 :(得分:6)
从Java 5开始,最好的选择是使用泛型和&lt;&gt;括号。这可以让您知道Map用于键和值的类型,并执行一些编译时检查以防止添加不正确的类型。它还可以使您在从地图中get
时将值转换为正确的类型。
如果要允许键和值的所有类,可以使用<?, ?>
泛型声明。但是,对于通用类型而言,最好是根据需要具体具体。
此外,可以规避通用检查,但它们肯定比没有更好。
答案 2 :(得分:1)
两者都正确。从第5版开始,泛型已成为JDK的一部分。您看到的其他代码可能是在5之前编写的,或者旨在向后兼容。
泛型具有给出类型的编译时强制执行的优势,并使您不必进行强制转换。