没有类型声明的Map.Entry



我是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())

因为CCD_ 8不具有CCD_。

最新更新