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.