C'est un joker à limite inférieure.
Les caractères génériques sont utiles dans les situations où seule une connaissance partielle du paramètre de type est requise. [...] Une limite supérieure est signifiée par la syntaxe :
? extends B
où B
est la limite supérieure. [...] il est permis de déclarer des limites inférieures sur un joker, en utilisant la syntaxe :
? super B
où B
est une borne inférieure.
A List<? super Integer>
par exemple, comprend List<Integer>
, List<Number>
y List<Object>
.
Les caractères génériques sont utilisés pour rendre les génériques plus puissants et plus flexibles ; les limites sont utilisées pour maintenir la sécurité des types.
Voir aussi
Pour ce qui est de l'utilité de cet outil dans <T extends Comparable<? super T>>
c'est quand vous avez quelque chose comme Cat extends Animal implements Comparable<Animal>
.
Regardez la signature de Collections.sort
public static <T extends Comparable<? super T>> void sort(List<T> list)
Par conséquent, avec un List<Cat> listOfCat
vous pouvez maintenant Collections.sort(listOfCat)
.
S'il avait été déclaré comme suit :
public static <T extends Comparable<T>> void sort(List<T> list)
alors il faudrait que tu aies Cat implements Comparable<Cat>
à utiliser sort
. En utilisant le ? super T
joker délimité, Collections.sort
devient plus flexible.
Voir aussi
-
Effective Java 2e édition, point 28 : utiliser les caractères génériques délimités pour accroître la flexibilité de l'API.
- Aussi, le principe PECS : "producteur
extends
consommateur super
"