JAVA: Ko- und Kontravarianz

Sei A Vater von B und B Vater von C.

? extends A bedeutet: alles wo A Vater ist (A,B,C)

?super A bedeutet; alles wo A Kind ist (A)

Beispiel : f(Box<? extends A> box) (Kovarianz)

Übergeben können Boxen von As, Bs oder Cs

A a  = box.get() erlaubt

box.set(a), box.set(b), box.set(c) nicht erlaubt, da Box entweder Box<A> oder Box<B> oder Box<C> ist.

Beispiel : f(Box<? super A> box) (Kontravarianz)

Übergeben kann nur Box von As (oder Väter von As)

Object o = box.get() erlaubt (kann aber nur Objekt sein)

box.set(a), box.set(b), box.set(c) erlaubt, da B (C) ein A ist

 

Schreibe einen Kommentar