И это позволит добавлять подклассы Foo.

ибудь знает, почему следующий код не компилируется? Ни add (), ни addAll () не работают должным образом. Удаление части «? Extends» заставляет все работать, но тогда я не смог бы добавить подклассы Foo.

 List<? extends Foo> list1 = new ArrayList<Foo>();
 List<? extends Foo> list2 = new ArrayList<Foo>();

 /* Won't compile */
 list2.add( new Foo() ); //error 1
 list1.addAll(list2);    //error 2 

ошибка 1:

IntelliJ говорит:

add(capture<? extends Foo>) in List cannot be applied to add(Foo)

Компилятор говорит:

cannot find symbol
symbol  : method addAll(java.util.List<capture#692 of ? extends Foo>)
location: interface java.util.List<capture#128 of ? extends Foo>

ошибка 2:

IntelliJ дает мне

addAll(java.util.Collection<? extends capture<? extends Foo>>) in List cannot be applied to addAll(java.util.List<capture<? extends Foo>>)

В то время как компилятор просто говорит

cannot find symbol
symbol  : method addAll(java.util.List<capture#692 of ? extends Foo>)
location: interface java.util.List<capture#128 of ? extends Foo>
        list1.addAll(list2);

Ответы на вопрос(5)

Ваш ответ на вопрос