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.
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:
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.
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.
public static <T extends Number> void processNumber(T number) {
// Accetta Integer, Double, Float, ecc.
System.out.println(number.doubleValue());
}
Probiere es aus
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.
Hinweis anzeigen
Schreiben Sie die Methoden mit der richtigen Signatur unter Verwendung des generischen Typparameters `T`.
Lösung nach 3 Versuchen verfügbar
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.
Hinweis anzeigen
Der Typparameter `<T>` muss direkt nach `static` und vor dem Rückgabetyp `void` platziert werden.
Lösung nach 3 Versuchen verfügbar
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().
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