Maison >Java >javaDidacticiel >Quelle est la différence entre les méthodes génériques Java et l'utilisation de caractères génériques ?

Quelle est la différence entre les méthodes génériques Java et l'utilisation de caractères génériques ?

WBOY
WBOYoriginal
2024-05-02 11:51:021251parcourir

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.

Java 泛型方法与通配符的使用有何区别?

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.

  • Le caractère générique de limite supérieure (? extends T) indique que le type inconnu est une sous-classe du type T ou T lui-même.
  • Le caractère générique de limite inférieure (? super T) indique que le type inconnu est la classe parent de type T ou T lui-même.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn