【发布时间】:2015-07-04 15:20:22
【问题描述】:
Line 1 : Set<Object> singletons = new HashSet<Object>();
Line 2 : singletons.add(new Integer(2));
Line 3 : Map<String, Object> myMap = new HashMap<String, String>();
为什么编译器在第 3 行报错而在第 2 行不报错?
【问题讨论】:
-
您在哪里看到地图和集合之间的行为差异?在这两种情况下,您根本没有做同样的事情。
Integer可隐式转换为Object。HashMap<String, String>不能隐式转换为Map<String, Object>。 -
泛型的工作方式不同。如果你把第一行改成
new HashSet<String>()也会报错。 -
@Jon Integer 可隐式转换为 object 那么为什么 Map
不能转换为 Map ?毕竟 String 也只是 Object 。编译器试图通过引发错误来拯救我们吗?为什么这不会是 Set -
@Manish:这会是
Set<Object>的问题 - 尝试使用Set<Object> set = new HashSet<String>();你会发现问题。虽然Integer是Object的子类型,但Map<String, String>不是Map<String, Object>的子类型。您可以将非字符串值放入Map<String, Object>例如...
标签: java data-structures