我是泛型的新手,所以不知道我要去哪里错了......
我有名为 Cat、Dog 和 Rabbit 的类,它们实现了接口 Animal。
以下代码将编译
Set<? extends Animal> animalSet;
Set<Dog> dogSet = new HashSet<Dog>();
animalSet = dogSet;
但是下面的代码不会
Map<String, Set<? extends Animal>> animalMap;
Map<String, Set<Dog>> dogMap = new HashMap<String, Set<Dog>>();
animalMap = dogMap; // this line will not compile
编译器说类型不兼容。我哪里错了?
更新
感谢大家的帮助
我通过添加另一个通配符更改了第一行代码以下代码将编译
Map<String, ? extends Set<? extends Animal>> animalMap;
Map<String, Set<Dog>> dogMap = new HashMap<String, Set<Dog>>();
animalMap = dogMap;
另请参阅下面 Cyrille Ka 给出的解决方案 - 使用 putAll() 将值从 dogMap 传输到 animalMap,而不是将 dogMap 分配给 animalMap。