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ßernull). -
? 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.