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());
}
}
这个问题的答案告诉我们,当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问或修改。(凯西和伯特)
'当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问或修改',这是什么意思?
据我所知,方法 do1 有List<? extends Dog> d2
所以 d2 只能访问但不能修改。方法 d2 有List<? super Collie> c2
所以 c2 可以访问和修改,并且没有编译错误。