Was ist der Unterschied zwischen <? super T> und <? extends T> in Java Generics?
Hallo Kollegen! Ich habe angefangen, Java Generics zu lernen und bin auf Wildcards gestoßen. Ich habe die Dokumentation gelesen und Videos angeschaut, aber ich bin immer noch verwirrt über zwei Konstrukte: ` super T>` und ` extends T>`.
Ich verstehe, dass `? extends T` "irgendein Typ, der ein Subtyp von T ist" bedeutet, und `? super T` — "irgendein Typ, der ein Supertyp von T ist". Aber in der Praxis bekomme ich ständig Compiler-Fehler.
Zum Beispiel habe ich diesen Code mit List:
```java
public class Test {
public static void addNumbers(List super Integer> list) {
list.add(42); // Das funktioniert
}
public static void readNumbers(List extends Integer> list) {
Integer num = list.get(0); // Das funktioniert
list.add(42); // Compiler-Fehler! Warum?
}
}
```