Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen generischen Java-Methoden und der Verwendung von Platzhaltern?

Was ist der Unterschied zwischen generischen Java-Methoden und der Verwendung von Platzhaltern?

WBOY
WBOYOriginal
2024-05-02 11:51:021153Durchsuche

Generische Methoden verfügen über Typparameter, die den ausführbaren Datentyp angeben. Platzhalter stellen unbekannte Typen dar, obere Platzhalter geben an, dass der Typ eine Unterklasse eines bestimmten Typs oder sich selbst ist, und untere Platzhalter geben an, dass der Typ eine übergeordnete Klasse oder sich selbst ist. Der Unterschied zwischen generischen Java-Methoden und Platzhaltern. Generische Methoden und Platzhalter sind zwei Mechanismen, die die Fähigkeiten von Generika weiter verbessern. In diesem Artikel werden ihre Unterschiede untersucht und anhand praktischer Beispiele gezeigt, wie man sie nutzt.

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

Eine generische Methode ist eine Methode, die Typparameter hat. Typparameter geben die Datentypen an, die eine Methode verwenden kann. Beispielsweise kann die folgende generische Methode mit einer Liste beliebigen Typs arbeiten:

public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.print(item + " ");
    }
    System.out.println();
}

Eine generische Methode kann durch Angabe eines Typparameters aufgerufen werden, wenn die Methode verwendet wird:

List<String> names = new ArrayList<>();
names.add("John");
names.add("Mary");

printList(names); // 输出:John Mary
Wildcards

Wildcards sind eine spezielle Syntax, die verwendet wird stellen unbekannte Typen dar. Sie werden häufig verwendet, um Ober- oder Untergrenzen für Generika festzulegen.

Der Platzhalter für die Obergrenze (? erweitert T)

gibt an, dass der unbekannte Typ eine Unterklasse des Typs T oder T selbst ist.

Der Platzhalter für die untere Grenze (? super T)

gibt an, dass der unbekannte Typ die übergeordnete Klasse des Typs T oder T selbst ist.

Zum Beispiel verwendet die folgende generische Methode einen Platzhalter für die Obergrenze, um die Oberklasse aller Objekte in der Liste abzurufen:

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;
}

    Praktischer Fall
  • Betrachten Sie den folgenden Fall: Wir haben eine Tierklasse, die die Animal-Schnittstelle implementiert und möchten eine Methode zum Drucken einer Liste von Tieren haben.
  • Generische Methoden
Wir können eine generische Methode erstellen, um jede Art von Tier zu drucken:

public static <T extends Animal> void printAnimals(List<T> animals) {
    for (T animal : animals) {
        System.out.println(animal.getName());
    }
}

Wildcards

Wir können auch Platzhalter verwenden, um jede Unterklasse von Tier darzustellen:

public static void printAnimals(List<? extends Animal> animals) { // 使用上限通配符
    for (Animal animal : animals) { // 使用上限通配符
        System.out.println(animal.getName());
    }
}

In diesen beiden Fällen können wir mit einer einzigen Methode eine Liste verschiedener Tierarten drucken. Generische Methoden bieten jedoch Typsicherheit, da sie die Typparameter dazu zwingen, die Animal-Schnittstelle zu erben, während Platzhalter diese Garantie nicht bieten.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen generischen Java-Methoden und der Verwendung von Platzhaltern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn