Sobes.tech
Junior — Middle

Quelle est la différence entre les mots-clés extends et super lors de l'utilisation de génériques en Java?

sobes.tech IA

Réponse de l'IA

En Java, lors de l'utilisation de génériques, les mots-clés extends et super sont utilisés pour restreindre les types et influencent la covariance et la contravariance.

  • ? extends T — restriction supérieure (covariance). Permet d'utiliser le type T ou toute sous-classe de celui-ci. Cela signifie que vous pouvez lire des objets du type T à partir de la collection, mais vous ne pouvez pas ajouter d'objets en toute sécurité à cette collection (sauf null).

  • ? super T — restriction inférieure (contravariance). Permet d'utiliser le type T ou toute super-classe de celui-ci. Cela signifie que vous pouvez ajouter des objets du type T à la collection, mais lors de la lecture, vous ne pouvez obtenir que des objets du type Object ou d'un type plus général.

Exemple :

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Peut lire comme Number
// listExtends.add(10); // Erreur de compilation

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Peut ajouter Integer
Object obj = listSuper.get(0); // Lors de la lecture, le type est Object

Ainsi, extends est utilisé lorsque vous souhaitez lire des données de la structure, et super lorsque vous souhaitez écrire des données.