Java HashMap是否有类型?

时间:2011-05-14 04:05:52

标签: java hashmap

HashMap的声明是否应始终包含类型,例如

private HashMap<String, String> test = new HashMap<String, String>();

因为我在书中看到很多例子,其中遗漏了<String, String>所以我们只有这样的内容:

private Map test= new HashMap();

哪一个'正确'?

3 个答案:

答案 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之前编写的,或者旨在向后兼容。

泛型具有给出类型的编译时强制执行的优势,并使您不必进行强制转换。