Listas com curingas causam erro genérico de vodu
Alguém sabe por que o código a seguir não é compilado? Nem add () nem addAll () funcionam conforme o esperado. A remoção da parte "? Extends" faz com que tudo funcione, mas não seria possível adicionar subclasses do 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 diz:
add(capture<? extends Foo>) in List cannot be applied to add(Foo)
O compilador diz:
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 dá
addAll(java.util.Collection<? extends capture<? extends Foo>>) in List cannot be applied to addAll(java.util.List<capture<? extends Foo>>)
Considerando que o compilador apenas diz
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);