Les méthodes génériques ont des paramètres de type qui spécifient le type de données exploitable. Les caractères génériques représentent des types inconnus, les caractères génériques supérieurs spécifient que le type est une sous-classe d'un type donné ou lui-même, et les caractères génériques inférieurs spécifient que le type est une classe parent ou lui-même.
La différence entre les méthodes génériques Java et les caractères génériques
Introduction
Les génériques sont un outil puissant en Java qui permet aux développeurs de créer du code réutilisable sans avoir à se soucier des incohérences dans la compatibilité des types de données. Les méthodes génériques et les caractères génériques sont deux mécanismes qui améliorent encore les capacités des génériques. Cet article explorera leurs différences et montrera comment les utiliser à travers des exemples pratiques.
Méthodes génériques
Une méthode générique est une méthode qui a des paramètres de type. Les paramètres de type spécifient les types de données qu'une méthode peut utiliser. Par exemple, la méthode générique suivante peut opérer sur une liste de n'importe quel type :
public static <T> void printList(List<T> list) { for (T item : list) { System.out.print(item + " "); } System.out.println(); }
Une méthode générique peut être appelée en spécifiant un paramètre de type lors de l'utilisation de la méthode :
List<String> names = new ArrayList<>(); names.add("John"); names.add("Mary"); printList(names); // 输出:John Mary
Wildcards
Les Wildcards sont une syntaxe spéciale utilisée pour représentent des types inconnus. Ils sont souvent utilisés pour créer des limites supérieures ou inférieures sur les génériques.
Par exemple, la méthode générique suivante utilise un caractère générique de limite supérieure pour obtenir la superclasse de tous les objets de la liste :
public static <T> List<Class<?>> getSuperclasses(List<? extends T> list) { List<Class<?>> superclasses = new ArrayList<>(); for (T item : list) { superclasses.add(item.getClass().getSuperclass()); } return superclasses; }
Cas pratique
Considérons le cas suivant : Nous avons une classe animal qui implémente l'interface Animal , et je souhaite avoir une méthode pour imprimer une liste d’animaux.
Méthodes génériques
Nous pouvons créer une méthode générique pour imprimer n'importe quel type d'animal :
public static <T extends Animal> void printAnimals(List<T> animals) { for (T animal : animals) { System.out.println(animal.getName()); } }
Wildcards
Nous pouvons également utiliser des caractères génériques pour représenter n'importe quelle sous-classe d'animal :
public static void printAnimals(List<? extends Animal> animals) { // 使用上限通配符 for (Animal animal : animals) { // 使用上限通配符 System.out.println(animal.getName()); } }
Dans ces deux Dans les deux cas , nous pouvons utiliser une seule méthode pour imprimer une liste de différents types d’animaux. Cependant, les méthodes génériques assurent la sécurité des types car elles obligent les paramètres de type à hériter de l'interface Animal, alors que les caractères génériques n'offrent pas cette garantie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!