Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 2 von 212/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Generische Typen in Java

Generics (generische Typen) wurden in Java eingeführt, um Klassen, Interfaces und Methoden die Möglichkeit zu geben, mit verschiedenen Typen als Parameter zu arbeiten. Dies gewährleistet die Typsicherheit zur Compilezeit (Compile-time Type Safety) und vermeidet aufwendige explizite Typumwandlungen (Casts) zur Laufzeit.

Generische Klassen

Eine generische Klasse wird unter Verwendung spitzer Klammern <T> definiert, wobei T als Platzhalter für einen Typ steht, der erst bei der Instanziierung angegeben wird.

Code
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Wenn wir ein Objekt vom Typ Box erstellen, geben wir den tatsächlichen Typ an:

Code
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // Nessun cast necessario!

Generische Methoden

Es ist möglich, eine einzelne generische Methode zu definieren, die unterschiedliche Typparameter akzeptieren kann. Der Typparameter wird vor dem Rückgabetyp der Methode platziert.

Code
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Einschränkungen bei Generics (Wildcards)

Wir können die von einem Generic akzeptierten Typen mithilfe des Schlüsselworts extends (obere Grenze) einschränken, um einen bestimmten Typ oder seine Unterklassen zu akzeptieren.

Code
public static <T extends Number> void processNumber(T number) {
    // Accetta Integer, Double, Float, ecc.
    System.out.println(number.doubleValue());
}

Probiere es aus

Übung#java.m6.l2.e1
Versuche: 0Wird geladen…

Vervollständigen Sie die generische Klasse Box, indem Sie den Getter getValue(), der T zurückgibt, und den Setter setValue(T value), der die private Variable value setzt, definieren.

Editor wird geladen…
Hinweis anzeigen

Schreiben Sie die Methoden mit der richtigen Signatur unter Verwendung des generischen Typparameters `T`.

Lösung nach 3 Versuchen verfügbar

Übung#java.m6.l2.e2
Versuche: 0Wird geladen…

Erstellen Sie eine generische statische Methode printArray, die ein Array vom Typ T[] namens array als Parameter akzeptiert und jedes Element mithilfe einer For-Each-Schleife ausgibt.

Editor wird geladen…
Hinweis anzeigen

Der Typparameter `<T>` muss direkt nach `static` und vor dem Rückgabetyp `void` platziert werden.

Lösung nach 3 Versuchen verfügbar

Übung#java.m6.l2.e3
Versuche: 0Wird geladen…

Erstellen Sie eine statische Klasse StringContainer, die das mit String parametrisierte Interface Container implementiert. Definieren Sie einen Konstruktor, der einen String-Parameter akzeptiert, und implementieren Sie die Methode getItem().

Editor wird geladen…
Hinweis anzeigen

Ersetzen Sie den generischen Typ `T` durch `String` in der Klassensignatur und im Rückgabetyp der Methode `getItem()`.

Lösung nach 3 Versuchen verfügbar