このタイプでAppleのスーパータイプを追加できると想定されている場合、新しいオブジェクトをリストに追加できないのはなぜですか?
import java.util.List;
import java.util.ArrayList;
class Apple{}
public class Macintosh extends Apple {
public static void main(String[] munch){
List<Apple> a = new ArrayList<Apple>();
basket(a);
}
static void basket(List<? super Apple> list){ list.add(new Object());}
}
引数を List リストに変更すると、もちろん動作します:s
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
public class Mixer<A extends Animal>{
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c){
return new Mixer<Animal>();
}
}
以前のケースでコンパイラがオブジェクトのクラスについて知らなかった場合、なぜ私たちはリターン時に Mixer を使用できるのでしょうか?¿