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.
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 MaryWildcards 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; }
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!