Heim > Java > javaLernprogramm > Hauptteil

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

WBOY
Freigeben: 2024-05-02 11:51:02
Original
1216 Leute haben es durchsucht

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();
}
Nach dem Login kopieren

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
Nach dem Login kopieren
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;
}
Nach dem Login kopieren

    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());
    }
}
Nach dem Login kopieren

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());
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage