通用编程:尝试将值放入EnumMap时出错

时间:2016-01-31 17:01:01

标签: java generics dictionary collections

我正在使用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>)

非常感谢任何帮助。

1 个答案:

答案 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>();