私はジェネリックに慣れていないので、どこが間違っているのかわかりません...
インタフェース Animal を実装する Cat、Dog、Rabbit というクラスがあります。
次のコードはコンパイルされます
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 による解決策も参照してください。