Почему 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 ?. Могли бы вы объяснить, и этот момент, пожалуйста.


Ответы (0 шт):