Unterschied e extends y vs ? extends y

  • Themenstarter Themenstarter Gerwing
  • Beginndatum Beginndatum
G

Gerwing

Gast
Wo ist der Unterschied zwischen List<E extends Y> und List<? extends Y> bzw. List<E> und List <?>?

Hat erstere Variante nur den Vorteil, dass ich das E auch noch im späteren Kontext verwenden kann?
 
In welchem Kontext sollte man das erste denn schreiben (können)?

List<? extends Y> : Eine List, die irgendwas enthält, was von E erbt
List<E> : Eine List, die "E"s einhält
List <?> : Eine List, die irgendwas enthält
 
Stimmt, das erste macht keinen Sinn weil bei der Verwendung der List ja ein konkreter
Typ für "E" angeben werden muss (z.B. List<String>)
 
Sowas wie "<E extends Y>" kann zwar auftreten, aber nicht so, wie du es geschrieben hast. Bei einer List steht's i.a. etwas konkreter dabei:

List<E> : Eine List, die "E"s einhält. Man kann mit
E e = list.get(i);
ein E rausholen, und mit
list.add(e);
ein E reintun.

List <?> : Eine List, die irgendwas enthält. Man kann sich mit
Object o = list.get(i);
ein Object rausholen, aber nichts reintun.

List<? extends Y>
Eine List, die irgendwas enthält, was von Y erbt. Man kann sich mit
Y y = list.get(i);
ein "Y" aus der List rausholen, aber NICHT mit
list.add(y);
ein Y reintun.

List<? super Y>
Eine List, die irgendwas enthält, was eine Oberklasse von Y ist.
Object o = list.get(i);
ein Object aus der List rausholen, und mit
list.add(y);
ein Y reintun.


Hoffe da sind trotz der frühen Stunde jetzt keine peinlichen Schnitzer drin 😳


EDIT: Wenn man's genau wissen will: DIE ultimative Referenz für alle Fragen zu Generics ist AngelikaLanger.com - Java Generics FAQs - Frequently Asked Questions - Angelika Langer Training/Consulting
 
Zuletzt bearbeitet:
Was wäre das Äquivalent zu dem alten RAW-Type List? Also Quasi eine Liste die unterschiedliche Objekte akzeptiert? List<?> bzw. List<E> erlaubt hier ja nur genau einen (unbekannten) Typ
 

Zurück
Oben