为什么与Set <objects>和Map <object,object>的行为有所不同

时间:2015-07-04 15:20:22

标签: java data-structures

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行没有抱怨?

2 个答案:

答案 0 :(得分:0)

尝试

 Map<String, String> myMap = new HashMap<String, String>();

 Map<String, Object> myMap = new HashMap<String, Object>();

但如果使用java版本&gt; = 7

,我会在右侧使用菱形运算符
 Map<String, String> myMap = new HashMap<>();

答案 1 :(得分:0)

作为mentioned in the comments,如果您将第一行更改为

Set<Object> singletons = new HashSet<String>();

你会得到同样的错误。这是因为HashSet<String>(甚至Set<String>)不是Set<Object>的子类型。要了解原因,请考虑您将在该集合上调用的操作。您已经调用了一个Integer对象。

singletons.add(new Integer(2));

这很好,因为您将singletons实例化为HashSet<Object>。如果您已将其实例化为HashSet<String>,那么您将向Integer集合添加String对象,这是不允许的。