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());
}
}
该问题的答案表明,当一个方法接受一个通配符泛型类型时,这个集合可以被访问或修改,但不能同时进行。 (Kathy和Bert)
“当一个方法接受一个通配符泛型类型时,这个集合可以被访问或修改,但不能同时进行”是什么意思?
据我所知, 方法do1有
List<? extends Dog> d2
,因此只能访问d2而不能修改它。
方法d2有List<? super Collie> c2
,因此可以访问和修改c2,且没有编译错误。
泛型指南