Wat is het verschil tussen de sleutelwoorden extends en super bij het gebruik van generics in Java?
sobes.tech AI
Antwoord van AI
In Java, bij het werken met generics worden de sleutelwoorden extends en super gebruikt om typen te beperken en beïnvloeden ze covariantie en contravariantie.
-
? extends T— bovengrens (covariantie). Hiermee kan het type T of een subklasse ervan worden gebruikt. Dit betekent dat je objecten van het type T uit de collectie kunt lezen, maar je kunt geen objecten veilig toevoegen aan zo'n collectie (behalvenull). -
? super T— ondergrens (contravariantie). Hiermee kan het type T of een superklasse ervan worden gebruikt. Dit betekent dat je objecten van het type T aan de collectie kunt toevoegen, maar bij het lezen krijg je alleen objecten van het type Object of een meer algemeen type.
Voorbeeld:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Kan lezen als Number
// listExtends.add(10); // Compileerfout
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Kan Integer toevoegen
Object obj = listSuper.get(0); // Bij lezen is het type Object
Dus, extends wordt gebruikt wanneer je gegevens uit de structuur wilt lezen, en super wanneer je gegevens wilt schrijven.