我正在使用Java泛型编程来创建HashMap:
Map< String, ? super TreeSet< MyObject>> myMap = new HashMap< String, TreeSet< MyObject>>();
但是当我尝试在myMap
中添加内容时,我收到错误。
Set< MyObject> mySet = new TreeSet< MyObject>();
myMap.put("toto", mySet);
错误是:
put(String, capture< ? super java.util.TreeSet< MyObject>>) in Map cannot be applied to (String, java.util.Set< MyObject>)
非常感谢任何帮助。
答案 0 :(得分:3)
mySet
声明为Set
类型,而地图只能在值中包含TreeSet
个。编译器不能保证要添加的mySet
不是HashSet
,这可能导致运行时异常。这就是它发出编译错误信号的原因。
在将TreeSet
声明为类型参数时,您应该编程到接口。换句话说,您应该使用Set
代替:
Map<String, ? super Set<MyObject>> myMap = new HashMap<String, Set<MyObject>>();
除非您确定始终只使用TreeSet
,否则您可以将mySet
的类型更改为TreeSet
:
// or
TreeSet<MyObject> mySet = new TreeSet<MyObject>();