Почему Set позволяет сделать .addAll, а List нет?
Почему в следующей части кода я могу сделать set11.addAll(set22):
public static <T> Set<T> symmetricDifference(Set<? extends T> set1, Set<? extends T> set2) {
Set<T> set11 = new HashSet<>(set1);
Set<T> set22 = new HashSet<>(set2);
set11.addAll(set2);
set22.retainAll(set1);
set11.removeAll(set22);
return set11;
}
А в следующем коде не могу сделать list1.addall(list2) по причине, что требуется Collection <? extends capture of ? extends T> , а я предоставляю List <capture of ? extends T> ?
public static <T> Set<T> symmetricDifference(Set<? extends T> set1, Set<? extends T> set2) {
List<? extends T> list1 = new ArrayList<>(set1);
List<? extends T> list2 = new ArrayList<>(set2);
list1.addAll(list2);
return new HashSet<>();
}
Честно, я не понимаю, что означает запись capture of ? и, соответственно, ? extends capture of ?. Могли бы вы объяснить, и этот момент, пожалуйста.