Listas con comodines provocan un error de vudú genérico

¿Alguien sabe por qué el siguiente código no se compila? Ni add () ni addAll () funcionan como se esperaba. La eliminación de la parte "? Extiende" hace que todo funcione, pero no podría agregar subclases de 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 

error 1:

IntelliJ dice:

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

El compilador dice:

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

error 2:

IntelliJ me da

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

Mientras que el compilador solo dice

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);

Respuestas a la pregunta(5)

Su respuesta a la pregunta