これを言葉で試みるのではなく、例を挙げましょう。
私は動物のクラスと、動物を拡張する犬、魚、猫などを持っています。
を返す3つの異なるメソッドがありMap<String,List<Dog>>, Map<String,List<Fish>>, Map<String,List<Cat>>
ます。これらをgetDogMap、getCatMap、およびgetFishMapと呼びます。
私は、さまざまなパラメーターに応じて、これらのメソッドの1つを呼び出すジェネリックメソッドを作成しています。これが私が許可されると期待していたことです:
public void <A extends Animal> doSomething(){
Map<String,List<A>> someMap;
if(someCondition){
someMap = getDogMap();
}else if(anotherCondition){
someMap = getFishMap();
}else{
someMap = getCatMap():
}
}
または少なくとも、それはalaをキャストすることですsomeMap = (Map<String,List<Dog>>) getDogMap();
ただし、これは機能しません。Eclipseが教えてくれます"Type mismatch: cannot convert from Map<String,List<Dog>> to Map<String,List<A>>"
キャストを強制しようとすると、教えてくれ"Cannot cast from Map<STring,List<Dog>> to Map<String,List<A>>"
ます。
私は何が間違っているのですか?