我通常会输入我的地图声明,但是正在做一些maint并找到一个没有输入。这让我想到了(哦不!)。 Map声明的默认输入是什么。请考虑以下事项:
Map map = new HashMap();
map.put("one", "1st");
map.put("two", new Integer(2));
map.put("three", "3rd");
for ( Map.Entry entry : map.entrySet() ){
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
这个错误与Map.Entry上的不兼容类型有关。所以如果我用:
键入声明Map<Object,Object> map = new HashMap();
然后一切顺利。那么在声明中设置的默认类型是什么?或者我错过了其他什么?
答案 0 :(得分:8)
没有默认类型。
Java泛型中的类型仅用于编译时检查。它们在运行时被删除,基本消失了。
将泛型视为静态帮助程序,以便a)更好地记录代码,以及b)为类型安全启用一些有限的编译时检查。
答案 1 :(得分:4)
类型是 java.lang.Object 。
for 构造采用一种 Iterable 并调用其迭代器方法。由于 Set 未使用泛型类型,因此迭代器返回 Object 类型的对象。这些需要显式转换为 Map.Entry 。
Map map = new HashMap();
map.put("one", "1st");
map.put("two", new Integer(2));
map.put("three", "3rd");
for (Object o : map.entrySet()) {
Map.Entry entry = (Map.Entry) o;
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
答案 2 :(得分:1)
HashMap是一组对象,即Think C ++容器。地图的每个元素都是一个用于保存数据的“桶” 您在桶中放置了不同类型的数据,hashmap需要知道这些数据类型并不完全相同。如果在hashmap中只放置了一种类型的数据,则会收到警告,但会进行编译。