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()
方法,以便打印出来。
另一方面,如果您想打印值 String
的 length()
而不是实际的 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()
方法。
我是 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()
方法,以便打印出来。
另一方面,如果您想打印值 String
的 length()
而不是实际的 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()
方法。