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 можно получить доступ и изменить его, и нет ошибки компиляции.