1/19
Diese Flashcards decken die wesentlichen Konzepte der parametrischen Polymorphie (Generics) in Java ab, einschließlich Typparametern, Schranken, Varianzregeln, Wildcards und deren Einschränkungen.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Subtype-Polymorphie
Die Eigenschaft, dass eine für einen Typ X definierte Operation automatisch auch auf alle Untertypen von X anwendbar ist (1 Implementierung für n Typen).
Parametrische Polymorphie
Auch als Generizität bezeichnet; ein Konzept, bei dem Typen (Klassen oder Interfaces) und Operationen für unterschiedliche tatsächliche Typen ohne Neuimplementierung parametrisiert werden können.
Zuweisungskompatibilität bei Subtype-Polymorphie
Werte eines Typs X können anstelle von Werten eines beliebigen Obertyps Y:>X verwendet werden.
Typvariable
Ein unqualifizierter Bezeichner (z. B. E), der mit einem Typparameter eingeführt wird und einen speziellen Referenztyp innerhalb des Sichtbarkeitsbereichs der deklarierenden Klasse darstellt.
Typargument
Ein Referenztyp (tatsächlicher Typparameter), der im Rahmen eines parametrisierten Typs für eine Typvariable angegeben wird, wie z. B. Integer in Pair<Integer>.
Upper Bound (Obere Schranke) u
Der allgemeinsteste zulässige Typ für einen Typparameter E. Standardmäßig ist dies Object. Es gilt für jedes zulässige Typargument x, dass u:>x sein muss.
Lower Bound (Untere Schranke) l
Der speziellste zulässige Typ für einen Typparameter E. Grundsätzlich ist dies der Null-Typ, der nur die Null-Referenz enthält. Es gilt x:>l.
Invarianz (Java Generics)
Ein parametrisierter Typ A<E> ist nur dann Untertyp eines anderen parametrisierten Typs B<F>, wenn A Untertyp von B ist und die Typargumente E und F identisch sind.
Kovarianz
Die theoretische Eigenschaft, dass die Typkompatibilität einer Spezialisierung des Typargumentes in gleicher Richtung folgt (X<:Y→C<X><:C<Y>). Java Generics sind nicht kovariant, um Laufzeit-Typfehler zu vermeiden.
Kontravarianz
Die theoretische Eigenschaft, dass die Typkompatibilität einer Spezialisierung des Typargumentes in entgegengesetzter Richtung folgt (X<:Y→C<X>:>C<Y>).
Raw Type
Die Angabe eines generischen Typs ohne Typargumente (z. B. List statt List<Integer>). Dies dient der Kompatibilität zu altem Code und führt zu einer Compiler-Warnung.
Wildcard (String?)
Stellt einen unbekannten Referenztyp (eine Menge von Typen) dar. Ein mit einer Wildcard parametrisierter Typ fungiert als Obertyp für eine Menge von parametrisierten Typen.
Upper Bounded Wildcard (?extendsT)
Eine Wildcard, die alle Typen akzeptiert, die Untertypen von T sind (einschließlich T selbst). Sie ermöglicht kovariante Zuweisungen, wobei Wertentnahmen sicher sind.
Lower Bounded Wildcard (?superT)
Eine Wildcard, die alle Typen akzeptiert, die Obertypen von T sind (einschließlich T selbst). Sie ermöglicht kontravariante Zuweisungen, wobei Wertübergaben sicher sind.
Typinferenz (Type Inference)
Ein Mechanismus, bei dem der Compiler die Typargumente einer generischen Methode automatisch aus den tatsächlichen Methodenargumenten ableitet, sodass diese beim Aufruf nicht explizit angegeben werden müssen.
Kovarianz von Arrays
In Java gilt für Arrays: Wenn X<:Y, dann ist X[]<:Y[]. Dies ermöglicht potenzielle Typfehler zur Laufzeit (ArrayStoreException).
Unchecked Conversion
Eine Konvertierung, die stattfindet, wenn ein Raw Type einem parametrisierten Typ zugewiesen wird (z. B. List<Integer> l = new ArrayList()), was eine Compiler-Warnung auslöst.
Einschränkung: Primitive Typen in Generics
Java Generics lassen nur Referenztypen als Typargumente zu; primitive Typen wie int sind unzulässig (z. B. ist List<int> nicht erlaubt).
Einschränkung: Statischer Kontext
Die Verwendung einer Typvariable in einem statischen Kontext (statische Methoden, Variablen oder Initializer-Blöcke) ist innerhalb einer generischen Klasse nicht zulässig.
Sichtbarkeitsbereich einer Typvariable
Bei generischen Methoden beschränkt sich der Sichtbarkeitsbereich der deklarierten Typvariable auf die gesamte Methodendeklaration (Typparameter, Rückgabewert, Parameter und Rumpf).