Middle
Was sind Generics und wofür werden sie verwendet?
sobes.tech KI
Antwort von AI
Generics in Java ermöglichen die Erstellung von Klassen, Schnittstellen und Methoden, die mit parametrisierten Typen arbeiten.
Hauptzweck von Generics:
- Erhöhung der Typsicherheit: Der Compiler überprüft die Typen zur Compile-Zeit und verhindert
ClassCastExceptionzur Laufzeit. - Vermeidung von Typumwandlungen: Es ist nicht notwendig, Typen manuell umzuwandeln, wenn Elemente aus Sammlungen extrahiert werden.
- Erstellung von flexiblerem und wiederverwendbarem Code: Man kann generische Algorithmen und Datenstrukturen schreiben, die auf verschiedene Datentypen anwendbar sind.
Beispiel ohne Generics:
// Vor Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // ohne Typisierung
list.add("Hallo");
list.add(123); // beliebiges Objekt kann hinzugefügt werden
String s = (String) list.get(0); // Typumwandlung erforderlich
Integer i = (Integer) list.get(1); // Typumwandlung erforderlich
// Es kann zu einem Laufzeitfehler kommen
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Beispiel mit Generics:
// Mit Generics
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // Liste von Strings
list.add("Hallo");
// list.add(123); // Kompilierungsfehler - kann keinen Integer hinzufügen
String s = list.get(0); // keine Typumwandlung notwendig
// Es ist nicht möglich, einen anderen Typ hinzuzufügen, was Fehler verhindert
// List<Integer> intList = new ArrayList<>();
// intList.add("Welt"); // Kompilierungsfehler
System.out.println(s);
}
}
Generics werden auch in:
- Klassen:
ArrayList<E>,HashMap<K, V> - Schnittstellen:
List<E>,Map<K, V> - Methoden:
<T> void printArray(T[] array) - Typbeschränkungen:
<T extends Comparable<T>>(Beschränkung auf Typen, dieComparableimplementieren)
Die Implementierung von Generics in Java basiert auf "Type Erasure" (Typ-Entfernung) zur Compile-Zeit. Das bedeutet, dass die Informationen über die generischen Typen entfernt werden und die JVM zur Laufzeit mit rohen Typen arbeitet. Dies gewährleistet Kompatibilität mit älteren Java-Versionen, hat aber einige Einschränkungen.