Java Generics Tutorial-Was sind Generika und wie benutzt man sie?

Java-Generika ist eines der wichtigsten Merkmale der Java-Sprache. Die Idee hinter Generika ist recht einfach, sie ist jedoch manchmal aufgrund der Verschiebung von der üblichen Syntax, die damit verbunden ist, so komplex.

Der Zweck dieses Tutorials besteht darin, Ihnen dieses nützliche Konzept der Generika auf leicht verständliche Weise vorzustellen.

Aber bevor wir uns mit Generika selbst befassen, wollen wir herausfinden, warum Java-Generika überhaupt benötigt wurden.,

Zweck von Java Generics

Vor der Einführung von Generika in Java 5 können Sie ein Code-Snippet wie dieses schreiben und kompilieren, ohne einen Fehler oder eine Warnung auszulösen:

Sie können einer Liste oder einer anderen Java-Sammlung Werte eines beliebigen Typs hinzufügen, ohne deklarieren zu müssen, welche Art von Daten sie speichert. Wenn Sie jedoch Werte aus der Liste abrufen, müssen Sie sie explizit in einen bestimmten Typ umwandeln.

Erwägen Sie, die obige Liste zu durchlaufen.,

Das Erstellen einer Liste ohne vorherige Deklaration des gespeicherten Datentyps kann, wie wir es getan haben, dazu führen, dass Programmierer Fehler wie oben machen, die ClassCastExceptions während der Laufzeit auslösen.

Generika wurden eingeführt, um zu verhindern, dass die Programmierer solche Fehler machen.

Mit Generika können Sie den Datentyp, der beim Erstellen einer Java-Sammlung gespeichert wird, explizit deklarieren, wie das folgende Beispiel zeigt.,

Hinweis: Sie können weiterhin ein Java-Sammlungsobjekt erstellen, ohne den gespeicherten Datentyp anzugeben, dies wird jedoch nicht empfohlen.

Jetzt können Sie eine Ganzzahl nicht fälschlicherweise in einer String-Typliste speichern, ohne einen Kompilierungsfehler auszulösen. Dadurch wird sichergestellt, dass in Ihrem Programm keine Laufzeitfehler auftreten.

Der Hauptzweck der Einführung von Generika in Java bestand darin, zu vermeiden, dass zur Laufzeit ClassCastExceptions.

Erstellen von Java-Generika

Sie können Generika verwenden, um Java-Klassen und-Methoden zu erstellen., Schauen wir uns die Beispiele an, wie Generika jedes Typs erstellt werden.

Generische Klasse

Beim Erstellen einer generischen Klasse wird der Typparameter für die Klasse am Ende des Klassennamens in den Klammern <> hinzugefügt.

Hier ist T der Datentypparameter. T, N und E sind einige der Buchstaben, die für Datentypparameter gemäß Java-Konventionen verwendet werden.,

Im obigen Beispiel können Sie ihm beim Erstellen eines GenericClass-Objekts einen bestimmten Datentyp übergeben.

Sie können beim Erstellen eines generischen Klassenobjekts keinen primitiven Datentyp an den Datentypparameter übergeben. Als Typparameter können nur Datentypen übergeben werden, die den Objekttyp erweitern.

Zum Beispiel:

Generische Methoden

Das Erstellen generischer Methoden folgt einem ähnlichen Muster wie das Erstellen generischer Klassen. Sie können sowohl eine generische als auch eine nicht generische Methode in einer generischen Klasse implementieren.,

Hier können Sie ein Array eines bestimmten Typs übergeben, um die Methode zu parametrieren. Die generische Methode PrintItems() durchläuft das übergebene Array und druckt die gespeicherten Elemente wie eine normale Java-Methode.

Begrenzte Typparameter

Bisher können die generischen Klassen und Methoden, die wir oben erstellt haben, auf jeden anderen Datentyp als primitive Typen parametriert werden. Aber was ist, wenn wir die Datentypen einschränken möchten, die an Generika übergeben werden können? Hier kommen begrenzte Typparameter ins Spiel.,

Sie können die von einer generischen Klasse oder Methode akzeptierten Datentypen definieren, indem Sie angeben, dass es sich um eine Unterklasse eines anderen Datentyps handeln soll.

Zum Beispiel:

Hier können die UpperBoundedClass und UpperBoundedMethod nur mit Untertypen des Datentyps parametriert werden.

Der Datentyp fungiert als Obergrenze für den Typparameter. Wenn Sie versuchen, einen Datentyp zu verwenden, der kein Subtyp von , wird ein Kompilierungsfehler ausgegeben.

Die Grenzen sind nicht nur auf Klassen beschränkt., Sie können auch Schnittstellen übergeben. Die Erweiterung der Schnittstelle bedeutet in diesem Fall die Implementierung der Schnittstelle.

Ein Parameter kann auch mehrere Grenzen haben, wie dieses Beispiel zeigt.

Der akzeptierende Datentyp muss eine Unterklasse von Tier-und Säugetierklassen sein. Wenn eine dieser Grenzen eine Klasse ist, muss sie in der gebundenen Deklaration an erster Stelle stehen.

Wenn Säugetier eine Klasse und Tier eine Schnittstelle ist, muss Säugetier wie oben gezeigt an erster Stelle stehen. Andernfalls löst der Code einen Kompilierungsfehler aus.,

Java Generics Wildcards

Wildcards werden verwendet, um Parameter generischer Typen an Methoden weiterzugeben. Im Gegensatz zu einer generischen Methode wird hier der generische Parameter an die von der Methode akzeptierten Parameter übergeben, was sich von dem oben diskutierten Datentypparameter unterscheidet. Ein Platzhalter wird durch die ? Symbol.

Die obige printItems() – Methode akzeptiert Listen eines beliebigen Datentyps als Parameter. Dies verhindert, dass Programmierer Codes für Listen verschiedener Datentypen wiederholen müssen, was ohne Generika der Fall wäre.,

Obere begrenzte Platzhalter

Wenn wir die in der von der Methode akzeptierten Liste gespeicherten Datentypen einschränken möchten, können wir begrenzte Platzhalter verwenden.

Beispiel:

printSubTypes() Die Methode akzeptiert nur die Listen, in denen Untertypen von Farbe gespeichert sind. Es akzeptiert eine Liste von redColor-oder BlueColor-Objekten, akzeptiert jedoch keine Liste von Tierobjekten. Dies liegt daran, dass Tier kein Subtyp der Farbe ist. Dies ist ein Beispiel für einen Platzhalter mit Obergrenze.,

Untergrenze Wildcards

Wenn wir:

dann akzeptiert die printSuperTypes() – Methode nur Listen, die Supertypen der Hundeklasse speichern. Es würde eine Liste von Säugetier-oder Tierobjekten akzeptieren, aber keine Liste von LabDog-Objekten, da LabDog keine Oberklasse von Dog, sondern eine Unterklasse ist. Dies ist ein Beispiel für einen untergebundenen Platzhalter.

Fazit

Java Generics ist seit seiner Einführung zu einer Funktion geworden, ohne die Programmierer nicht leben können.

Diese Popularität beruht auf ihren Auswirkungen auf das Leben von Programmierern., Abgesehen davon, dass sie keine Codierungsfehler machen, macht die Verwendung von Generika den Code weniger repetitiv. Haben Sie bemerkt, wie Klassen und Methoden verallgemeinert werden, um zu vermeiden, dass Code für verschiedene Datentypen wiederholt werden muss?

Ein gutes Verständnis von Generika ist wichtig, um ein Experte in der Sprache zu werden. Wenn Sie also das, was Sie in diesem Tutorial gelernt haben, in praktischem Code anwenden, können Sie jetzt weitermachen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.