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