Sobes.tech
Junior — Middle

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 (behalve null).

  • ? 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.