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 (saufnull). -
? 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.