Je suis en train de lire sur les méthodes génériques de OracleDocGenericMethod . Je suis assez perplexe quant à la comparaison entre l'utilisation des méthodes génériques et l'utilisation des jokers. Je cite le document.
interface Collection<E> { public boolean containsAll(Collection<?> c); public boolean addAll(Collection<? extends E> c); }
Nous aurions pu utiliser des méthodes génériques à la place :
interface Collection<E> { public <T> boolean containsAll(Collection<T> c); public <T extends E> boolean addAll(Collection<T> c); // Hey, type variables can have bounds too! }
[ ] Cela nous indique que l'argument type est utilisé pour le polymorphisme ; son seul effet est de permettre à une variété de types d'arguments réels d'être d'être utilisés à différents sites d'invocation. Si c'est le cas, on devrait utiliser des caractères génériques. Les jokers sont conçus pour supporter un sous-typage flexible, ce qui est ce que nous essayons d'exprimer ici.
Ne pensons nous pas que la carte sauvage comme (Collection<? extends E> c);
est aussi une sorte de soutien polymorphisme ? Alors pourquoi l'utilisation de méthodes génériques n'est pas considérée comme bonne dans ce cas ?
En poursuivant, il est dit,
Les méthodes génériques permettent d'utiliser des paramètres de type pour exprimer des dépendances entre les types d'un ou plusieurs arguments d'une méthode et/ou son type de retour. Si une telle dépendance n'existe pas, une méthode générique ne doit pas être utilisée.
Qu'est-ce que cela signifie ?
Ils ont présenté l'exemple
class Collections { public static <T> void copy(List<T> dest, List<? extends T> src) { ... }
[ ]
Nous aurions pu écrire la signature de cette méthode d'une autre manière, sans utiliser de caractères de remplacement :
class Collections { public static <T, S extends T> void copy(List<T> dest, List<S> src) { ... }
Le document déconseille la deuxième déclaration et encourage l'utilisation de la première syntaxe ? Quelle est la différence entre la première et la deuxième déclaration ? Les deux semblent faire la même chose ?
Quelqu'un peut-il faire la lumière sur cette zone ?