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行没有抱怨?
答案 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
对象,这是不允许的。