Sobes.tech
Junior — Middle

Was ist der Unterschied zwischen den Schlüsselwörtern extends und super bei der Verwendung von Generics in Java?

sobes.tech KI

Antwort von AI

In Java, bei der Arbeit mit Generics werden die Schlüsselwörter extends und super verwendet, um die Typen einzuschränken und beeinflussen Kovarianz und Kontravarianz.

  • ? extends T — obere Einschränkung (Kovarianz). Ermöglicht die Verwendung des Typs T oder einer Unterklasse davon. Das bedeutet, dass Objekte vom Typ T aus der Sammlung gelesen werden können, aber keine Objekte sicher hinzugefügt werden können (außer null).

  • ? super T — untere Einschränkung (Kontravarianz). Ermöglicht die Verwendung des Typs T oder einer Oberklasse davon. Das bedeutet, dass Objekte vom Typ T in die Sammlung eingefügt werden können, beim Lesen jedoch nur Objekte vom Typ Object oder einem allgemeineren Typ erhalten werden.

Beispiel:

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Kann als Number gelesen werden
// listExtends.add(10); // Kompilierungsfehler

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Kann Integer hinzufügen
Object obj = listSuper.get(0); // Beim Lesen ist der Typ Object

Daher wird extends verwendet, wenn Daten aus der Struktur gelesen werden sollen, und super, wenn Daten geschrieben werden sollen.