Es wäre schön, wenn wir eine einzelne Sortiermethode schreiben könnten, die die Elemente in einem Integer-Array, einem String-Array, sortieren könnte oder ein Array eines beliebigen Typs, der die Reihenfolge unterstützt.
Mit generischen Java-Methoden und generischen Klassen können Programmierer mit einer einzelnen Methodendeklaration einen Satz verwandter Methoden oder mit einer einzelnen Klassendeklaration einen Satz angeben
Generics bieten auch Typensicherheit zur Kompilierungszeit, mit der Programmierer ungültige Typen zur Kompilierungszeit abfangen können.
Mit dem Java Generic-Konzept können wir eine generische Methode schreiben Rufen Sie zum Sortieren eines Arrays von Objekten die generische Methode mit Integer-Arrays, Double-Arrays, String-Arrays usw. auf, um die Array-Elemente zu sortieren.
Generische Methoden
Sie können schreiben eine einzelne generische Methodendeklaration, die ca. mit Argumenten verschiedener Art gefüllt. Basierend auf den Typen der Argumente, die an die generische Methode übergeben werden, behandelt der Compiler jeden Methodenaufruf entsprechend. Im Folgenden finden Sie die Regeln zum Definieren generischer Methoden:
-
Alle generischen Methodendeklarationen haben einen Typparameterabschnitt, der durch spitze Klammern (< und >) vor dem Rückgabetyp der Methode (< E > im nächsten Beispiel ).
-
Jeder Typparameterabschnitt enthält einen oder mehrere durch Kommas getrennte Typparameter. Ein Typparameter, auch als Typvariable bezeichnet, ist ein Bezeichner, der einen generischen Typnamen angibt
-
Die Typparameter können verwendet werden, um den Rückgabetyp zu deklarieren und als Platzhalter für die Typen der an die generische Methode übergebenen Argumente zu fungieren, die als tatsächliche Typargumente bezeichnet werden.
-
Der Körper einer generischen Methode wird wie der einer anderen Methode deklariert. Beachten Sie, dass Typparameter nur Referenztypen darstellen können, keine primitiven Typen (wie int, double und char).
Beispiel
Das folgende Beispiel zeigt, wie wir kann ein Array unterschiedlichen Typs mit einer einzigen generischen Methode drucken –
Dies führt zu folgendem Ergebnis:
Ausgabe
Array integerArray contains:1 2 3 4 5 Array doubleArray contains:1.1 2.2 3.3 4.4 Array characterArray contains:H E L L O
Begrenzte Typparameter
Es kann vorkommen, dass Sie die Arten von Typen einschränken möchten, die an einen Typparameter übergeben werden dürfen. Beispielsweise kann eine Methode, die mit Zahlen arbeitet, dies tun Sie möchten nur Instanzen von Number oder seinen Unterklassen akzeptieren. Dafür sind Parameter mit begrenztem Typ vorgesehen.
Um einen Parameter mit begrenztem Typ zu deklarieren, listen Sie den Namen des Typparameters auf, gefolgt vom Schlüsselwort extens, gefolgt von seine obere Grenze.
Beispiel
Das folgende Beispiel zeigt, wie Erweiterungen im Allgemeinen verwendet werden, um entweder „Erweiterungen“ (wie in Klassen) oder „Implementierungen“ (wie in Schnittstellen) zu bedeuten. . Dieses Beispiel ist eine generische Methode, um das größte von drei vergleichbaren Objekten zurückzugeben –
Dies führt zu folgendem Ergebnis:
Ausgabe
Max of 3, 4 and 5 is 5Max of 6.6,8.8 and 7.7 is 8.8Max of pear, apple and orange is pear
Generische Klassen
Eine generische Klassendeklaration sieht aus wie eine nicht generische Klassendeklaration, außer dass auf den Klassennamen ein Typparameterabschnitt folgt.
Wie bei generischen Methoden kann der Typparameterabschnitt einer generischen Klasse einen oder mehrere durch Kommas getrennte Typparameter enthalten. Diese Klassen werden als parametrisierte Klassen oder parametrisierte Typen bezeichnet, da sie einen oder mehrere Parameter akzeptieren.
Beispiel
Das folgende Beispiel zeigt, wie wir eine generische Klasse definieren können –
Dies führt zu folgendem Ergebnis:
Ausgabe
Integer Value :10String Value :Hello World