Java 泛型编程:尝试将值放入枚举映射时出错

Java 泛型编程:尝试将值放入枚举映射时出错,java,generics,dictionary,collections,Java,Generics,Dictionary,Collections,我正在使用Java泛型编程创建HashMap: Map< String, ? super TreeSet< MyObject>> myMap = new HashMap< String, TreeSet< MyObject>>(); 错误是: put(String, capture< ? super java.util.TreeSet< MyObject>>) in Map cannot be applied to (S

我正在使用Java泛型编程创建HashMap:

 Map< String, ? super TreeSet< MyObject>> myMap = new HashMap< String, TreeSet< MyObject>>();
错误是:

put(String, capture< ? super java.util.TreeSet< MyObject>>) in Map cannot be applied to (String, java.util.Set< MyObject>)
映射中的put(String,capture<?super java.util.TreeSet>)不能应用于(String,java.util.Set
任何帮助都将不胜感激。

mySet
被声明为
Set
类型,而映射只能在值中包含
TreeSet
s。编译器无法保证要添加的
mySet
不是
HashSet
,这可能导致运行时异常。这就是它发出编译错误信号的原因

当将
TreeSet
声明为类型参数时,应该对接口编程。换句话说,您应该使用
Set

Map<String, ? super Set<MyObject>> myMap = new HashMap<String, Set<MyObject>>();
Map<String, ? super Set<MyObject>> myMap = new HashMap<String, Set<MyObject>>();
// or
TreeSet<MyObject> mySet = new TreeSet<MyObject>();