Ogólne niższe niezwiązane vs górne graniczne symbole wieloznaczne

import java.util.List;
import java.util.ArrayList;

interface Canine {}
class Dog implements Canine {}
public class Collie extends Dog {
    public static void main(String[] args){
        List<Dog> d = new ArrayList<Dog>();
        List<Collie> c = new ArrayList<Collie>();
        d.add(new Collie());
        c.add(new Collie());
        do1(d); do1(c);
        do2(d); do2(c);
    }
    static void do1(List<? extends Dog> d2){
        d2.add(new Collie());
        System.out.print(d2.size());
    }
    static void do2(List<? super Collie> c2){
        c2.add(new Collie());
        System.out.print(c2.size());
    }
}

Odpowiedź na to pytanie mówi, że gdy metoda przyjmuje typowy typ wieloznaczny, kolekcję można uzyskać lub zmodyfikować, ale nie obie. (Kathy i Bert)

Co to znaczy 'gdy metoda przyjmuje typowy typ wieloznaczny, kolekcja może być dostępna lub zmodyfikowana, ale nie obie?

O ile wiem, metoda do1 maList<? extends Dog> d2 więc dostęp do d2 można uzyskać, ale nie można go modyfikować. Metoda d2 maList<? super Collie> c2 więc c2 może być dostępny i zmodyfikowany i nie ma błędu kompilacji.

Ogólne wytyczne

questionAnswers(5)

yourAnswerToTheQuestion