Map.Entry 没有类型声明

Map.Entry without type declaration

我是 Java 的新手,但我需要快速掌握一些基础知识才能使用一些基本数据结构。

这是一个我想更好地理解的小例子,即 Map.Entry<Integer,String> 部分。

HashMap<Integer,String> my_hashmap = new HashMap<>();

 my_hashmap.put(20,"twenty");
 my_hashmap.put(30,"thirty");

 for (Map.Entry<Integer,String> m:my_hashmap.entrySet()) {
     System.out.println(m.getKey() + " " + m.getValue());
 }

事实证明,我可以省略 <Integer, String> 声明,这完全没有区别。这是一种不好的做法吗?据我所知,在幕后,这在某种程度上被解释为 Object 类型,所以没有问题,但这并没有从使用泛型中获益。我的理解正确吗?谢谢。

使用原始类型是不好的做法。

在您的示例中,由于您只是简单地打印每个条目的键和值,因此代码通过了编译并可以正常工作,因为它使用了所有 类 实现的 toString() 方法,以便打印出来。

另一方面,如果您想打印值 Stringlength() 而不是实际的 String,您可以编写

System.out.println(m.getKey() + " " + m.getValue().getLength());

现在,如果你改变了,这将不会通过编译

for (Map.Entry<Integer,String> m:my_hashmap.entrySet())

for (Map.Entry m:my_hashmap.entrySet())

因为 Object 没有 length() 方法。