Списки с подстановочными знаками вызывают общую ошибку вуду

Кто-нибудь знает, почему следующий код не компилируется? Ни 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);
37
задан oligofren 23 March 2011 в 15:52
поделиться