Generics in Java: Flexiblen Code ohne (ClassCastException) schreiben

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Generics in Java: Wie man keine Angst mehr vor spitzen Klammern hat und zuverlässigen Code schreibt

\n\n

In der Welt von Java gibt es eine Sache, die Anfänger fast mehr erschreckt als Multithreading – die spitzen Klammern <>. Generics (auch bekannt als Verallgemeinerungen) sehen geheimnisvoll aus, sind aber in Wirklichkeit Ihr wichtigster Verbündeter im Kampf für sauberen und sicheren Code. Lassen Sie uns anhand von Beispielen, die Sie noch heute anwenden können, verstehen, wie die Typisierung in Java funktioniert.

\n\n

Stellen Sie sich vor: Sie schreiben eine Methode, die sowohl mit Zahlen als auch mit Zeichenketten und Ihren eigenen Klassen arbeiten soll. Ohne Generics müssten Sie Dutzende überladener Methoden erstellen oder Object verwenden und ständig manuell Typen überprüfen. Java-Verallgemeinerungen lösen dieses Problem elegant und sicher.

\n\n

Warum wird Code ohne Generics zum Minenfeld?

\n\n

Erinnern wir uns daran, wie Programmierer vor der Einführung von Generics (vor Java 5) lebten. Wenn Sie jemals ArrayList ohne Typangabe geschrieben haben, kennen Sie diesen Albtraum:

\n\n
List list = new ArrayList();\nlist.add("Hallo");\nlist.add(42);\nlist.add(new Object());\n\n// Irgendwo 100 Codezeilen später:\nString text = (String) list.get(1); // ClassCastException zur Laufzeit!
\n\n

Das klassische Problem: ClassCastException – ein Fehler, der erst zur Laufzeit auftritt. Sie könnten die Liste an eine andere Methode übergeben haben, und dort ist jemand sicher, dass sie nur Zeichenketten enthält. Und peng! Die Anwendung stürzt ab. Generics in Java verlagern die Typprüfung in die Kompilierungsphase – das ist wie eine Versicherung, die greift, bevor Sie sich ans Steuer setzen.

\n\n

Generics in Java: Grundlegende Syntax, die Sie kennen müssen

\n\n

Die Grundidee von Generics ist einfach: Wir parametrisieren eine Klasse oder Methode mit einem Typ. Anstelle eines konkreten Typs schreiben wir einen Typparameter (normalerweise ein einzelner Großbuchstabe: T, E, K, V).

\n\n

Das bekannteste Beispiel sind Java-Collections:

\n\n
// Ohne Generics – gefährlich\nList rawList = new ArrayList();\n\n// Mit Generics – sicher\nList<String> safeList = new ArrayList<>();\nsafeList.add("Java");\nsafeList.add("Generics");\n// safeList.add(123); // Kompilierungsfehler!
\n\n

Der Compiler weiß jetzt: Innerhalb von safeList können nur Zeichenketten sein. Der Versuch, eine Zahl hinzuzufügen, führt zu einem Fehler während der Kompilierung, nicht zur Laufzeit. Das ist Java-Typsicherheit in Aktion.

\n\n

Erstellen unserer ersten generischen Klasse

\n\n

Angenommen, wir schreiben einen einfachen Container zum Speichern eines einzelnen Werts. Ohne Generics müssten wir Object verwenden:

\n\n
public class Box {\n    private Object value;\n\n    public void set(Object value) { this.value = value; }\n    public Object get() { return value; }\n}
\n\n

Und jetzt – mit Generics:

\n\n
public class Box<T> {\n    private T value;\n\n    public void set(T value) { this.value = value; }\n    public T get() { return value; }\n}\n\n// Verwendung:\nBox<Integer> intBox = new Box<>();\nintBox.set(100);\nint value = intBox.get(); // Ohne Cast!
\n\n

Beachten Sie: Wir müssen nicht mehr (Integer) intBox.get() schreiben. Der Compiler weiß selbst, dass get() ein Integer zurückgibt. Das ist die Magie der Java-Verallgemeinerungen.

\n\n

Typisierung in Java: Einschränkungen und Wildcards

\n\n

Generics wären zu einfach, gäbe es nicht Nuancen. Die wichtigste davon sind gebundene Typparameter. Manchmal muss man sagen: "Der Typ T muss eine Zahl sein" oder "T muss das Comparable-Interface implementieren".

\n\n
// T kann nur Number oder eine Unterklasse davon sein\npublic class Calculator<T extends Number> {\n    private T value;\n\n    public double square() {\n        return value.doub                

Blogs

Buchempfehlungen