import java.util.List;
import java.util.ArrayList;
interface Canine {}
class Dog implements Canine {}
public class Collie extends Dog {
public static void main(String[] args){
List<Dog> d = new ArrayList<Dog>();
List<Collie> c = new ArrayList<Collie>();
d.add(new Collie());
c.add(new Collie());
do1(d); do1(c);
do2(d); do2(c);
}
static void do1(List<? extends Dog> d2){
d2.add(new Collie());
System.out.print(d2.size());
}
static void do2(List<? super Collie> c2){
c2.add(new Collie());
System.out.print(c2.size());
}
}
この質問に対する答えは、メソッドがワイルドカードの汎用typを使用する場合、コレクションにアクセスまたは変更できるが、両方はできないことを示しています。(キャシーとバート)
'メソッドがワイルドカードの汎用typを使用する場合、コレクションにアクセスまたは変更できますが、両方を使用することはできません'とはどういう意味ですか?
私の知る限り、メソッドdo1にはList<? extends Dog> d2
、d2にのみアクセスでき、変更できないようになっています。メソッドd2にはList<? super Collie> c2
、c2にアクセスして変更でき、コンパイルエラーがないようになっています。