Podcast
Questions and Answers
Angenommen, a.compareTo(b)
gibt einen negativen Wert zurück. Wie ist die Beziehung zwischen a
und b
gemäß der Konvention?
Angenommen, a.compareTo(b)
gibt einen negativen Wert zurück. Wie ist die Beziehung zwischen a
und b
gemäß der Konvention?
- `a` und `b` sind unvergleichbar.
- `a` ist gleich `b`.
- `a` ist größer als `b`.
- `a` ist kleiner als `b`. (correct)
Welche Aussage beschreibt am besten die Funktionalität der hasNext()
-Methode im Iterator
-Interface?
Welche Aussage beschreibt am besten die Funktionalität der hasNext()
-Methode im Iterator
-Interface?
- Sie liefert das nächste Element in der Aufzählung und entfernt es aus dem Behälter.
- Sie liefert das nächste Element der Aufzählung.
- Sie liefert `true`, wenn es noch weitere Elemente in der Aufzählung des Behälters gibt. (correct)
- Sie liefert `true`, wenn das zuletzt mit `next()` gelieferte Element entfernt wurde.
Die remove()
-Methode im Iterator
-Interface ist als 'optional' gekennzeichnet. Was bedeutet das?
Die remove()
-Methode im Iterator
-Interface ist als 'optional' gekennzeichnet. Was bedeutet das?
- Sie muss in jeder Implementierung des `Iterator`-Interfaces vorhanden sein, darf aber nicht aufgerufen werden.
- Sie muss immer aufgerufen werden, bevor `next()` aufgerufen wird.
- Sie kann weggelassen werden, wobei ein Aufruf möglicherweise zu einer Ausnahme führt. (correct)
- Sie ist obligatorisch und muss in jeder Implementierung korrekt funktionieren.
In der Point2D
Klasse, was passiert wenn xc==0
in der compareTo
Methode?
In der Point2D
Klasse, was passiert wenn xc==0
in der compareTo
Methode?
Was ist die Hauptaufgabe eines Iterators?
Was ist die Hauptaufgabe eines Iterators?
In der MyListIterator
-Klasse, welche Aufgabe hat die Variable cursor
?
In der MyListIterator
-Klasse, welche Aufgabe hat die Variable cursor
?
Welchen Wert gibt die hasNext()
-Methode in MyListIterator
zurück, wenn cursor
gleich null
ist?
Welchen Wert gibt die hasNext()
-Methode in MyListIterator
zurück, wenn cursor
gleich null
ist?
Was passiert, wenn die remove()
Methode im Iterator
Interface nicht implementiert wird?
Was passiert, wenn die remove()
Methode im Iterator
Interface nicht implementiert wird?
Welchen Vorteil bietet die Verwendung von Interfaces wie List
als Typ für Variablen und Parameter im Vergleich zur Verwendung konkreter Implementierungen wie ArrayList
?
Welchen Vorteil bietet die Verwendung von Interfaces wie List
als Typ für Variablen und Parameter im Vergleich zur Verwendung konkreter Implementierungen wie ArrayList
?
Welchen Zweck erfüllt das Comparable
Interface in Java?
Welchen Zweck erfüllt das Comparable
Interface in Java?
Welche Aussage beschreibt am besten den Unterschied zwischen einer ArrayList
und einer LinkedList
hinsichtlich ihrer Performance?
Welche Aussage beschreibt am besten den Unterschied zwischen einer ArrayList
und einer LinkedList
hinsichtlich ihrer Performance?
Welche Schnittstelle sollte man verwenden, um eine Sammlung von Objekten zu durchlaufen, ohne die spezifische Implementierung der Sammlung zu kennen?
Welche Schnittstelle sollte man verwenden, um eine Sammlung von Objekten zu durchlaufen, ohne die spezifische Implementierung der Sammlung zu kennen?
Welche der folgenden Aussagen ist korrekt bezüglich der Methode compareTo(T o)
des Comparable
Interfaces?
Welche der folgenden Aussagen ist korrekt bezüglich der Methode compareTo(T o)
des Comparable
Interfaces?
Angenommen, Sie haben eine sehr große Datenmenge und müssen häufig Elemente am Anfang der Liste einfügen. Welche Implementierung des List
-Interfaces wäre am effizientesten?
Angenommen, Sie haben eine sehr große Datenmenge und müssen häufig Elemente am Anfang der Liste einfügen. Welche Implementierung des List
-Interfaces wäre am effizientesten?
Sie schreiben eine Methode, die eine Liste von Zahlen sortieren soll. Welchen Typ sollte der Parameter der Methode haben, um die größtmögliche Flexibilität zu gewährleisten?
Sie schreiben eine Methode, die eine Liste von Zahlen sortieren soll. Welchen Typ sollte der Parameter der Methode haben, um die größtmögliche Flexibilität zu gewährleisten?
Welche der folgenden Methoden ist im List
Interface definiert?
Welche der folgenden Methoden ist im List
Interface definiert?
Welche Aussage beschreibt am besten den Zweck der Iterable
Schnittstelle in Bezug auf Schleifen?
Welche Aussage beschreibt am besten den Zweck der Iterable
Schnittstelle in Bezug auf Schleifen?
Was ist die korrekte Syntax, um eine generische Klasse MeineKlasse
zu deklarieren, die einen Typparameter T
akzeptiert?
Was ist die korrekte Syntax, um eine generische Klasse MeineKlasse
zu deklarieren, die einen Typparameter T
akzeptiert?
Die LinkedList
Klasse implementiert die Iterable
Schnittstelle. Welche Auswirkung hat dies auf die Verwendung von LinkedList
?
Die LinkedList
Klasse implementiert die Iterable
Schnittstelle. Welche Auswirkung hat dies auf die Verwendung von LinkedList
?
Welche der folgenden Aussagen ist FALSCH bezüglich der Verwendung von Generics in Java?
Welche der folgenden Aussagen ist FALSCH bezüglich der Verwendung von Generics in Java?
Was passiert, wenn man versucht, einer generischen List<Integer>
ein Objekt vom Typ String
hinzuzufügen?
Was passiert, wenn man versucht, einer generischen List<Integer>
ein Objekt vom Typ String
hinzuzufügen?
Betrachten Sie folgenden Code: List<Point2D> list = new LinkedList<>();
. Was bedeutet Point2D
in dieser Deklaration?
Betrachten Sie folgenden Code: List<Point2D> list = new LinkedList<>();
. Was bedeutet Point2D
in dieser Deklaration?
Welche der folgenden Schnittstellen wird von der Schnittstelle List
erweitert?
Welche der folgenden Schnittstellen wird von der Schnittstelle List
erweitert?
Warum ist es vorteilhaft, Generics anstelle von Object
als allgemeinen Typ in Sammlungen zu verwenden?
Warum ist es vorteilhaft, Generics anstelle von Object
als allgemeinen Typ in Sammlungen zu verwenden?
Warum ist der Aufruf der Methode add
innerhalb einer Methode, die eine LinkedList
mit einem Wildcard-Typ als Typargument verwendet, eingeschränkt?
Warum ist der Aufruf der Methode add
innerhalb einer Methode, die eine LinkedList
mit einem Wildcard-Typ als Typargument verwendet, eingeschränkt?
Welche Einschränkung tritt auf, wenn Methoden einer LinkedList
den Typparameter als Ergebnis liefern?
Welche Einschränkung tritt auf, wenn Methoden einer LinkedList
den Typparameter als Ergebnis liefern?
Wie können nach unten beschränkte Wildcards dazu beitragen, Einschränkungen bei der Verwendung von LinkedList
aufzuheben?
Wie können nach unten beschränkte Wildcards dazu beitragen, Einschränkungen bei der Verwendung von LinkedList
aufzuheben?
Betrachten Sie die Klassenhierarchie mit GeoWithExtent
, Rectangle
und Circle
. Was ist der Zweck der Schnittstelle GeoWithExtent
?
Betrachten Sie die Klassenhierarchie mit GeoWithExtent
, Rectangle
und Circle
. Was ist der Zweck der Schnittstelle GeoWithExtent
?
Welche Aussage trifft im Allgemeinen NICHT auf Wildcards in generischen Typen zu?
Welche Aussage trifft im Allgemeinen NICHT auf Wildcards in generischen Typen zu?
Warum sind zwei unterschiedliche Arten von Wildcards notwendig (nach oben und nach unten beschränkt)?
Warum sind zwei unterschiedliche Arten von Wildcards notwendig (nach oben und nach unten beschränkt)?
Angenommen, Sie haben eine LinkedList
. Welche der folgenden Operationen könnte problematisch sein, wenn auf die Liste über einen Wildcard-Typ zugegriffen wird?
Angenommen, Sie haben eine LinkedList
. Welche der folgenden Operationen könnte problematisch sein, wenn auf die Liste über einen Wildcard-Typ zugegriffen wird?
Wie beeinflusst die Verwendung von generischen Typen mit Wildcards die Wiederverwendbarkeit von Code?
Wie beeinflusst die Verwendung von generischen Typen mit Wildcards die Wiederverwendbarkeit von Code?
Welche Aussage über die Verwendung der extends
-Klausel mit Schnittstellen in generischen Typen ist korrekt?
Welche Aussage über die Verwendung der extends
-Klausel mit Schnittstellen in generischen Typen ist korrekt?
Welche Aussage beschreibt korrekt den Unterschied zwischen expliziter und automatischer Typbestimmung bei generischen Typen in Java?
Welche Aussage beschreibt korrekt den Unterschied zwischen expliziter und automatischer Typbestimmung bei generischen Typen in Java?
Warum ist LinkedList<Point2D>
keine Oberklasse von LinkedList<Object>
, obwohl Point2D
eine Unterklasse von Object
ist?
Warum ist LinkedList<Point2D>
keine Oberklasse von LinkedList<Object>
, obwohl Point2D
eine Unterklasse von Object
ist?
Betrachten Sie den gegebenen Codeausschnitt zur swap
-Methode. Was ist das Hauptproblem in der Implementierung von swap
?
Betrachten Sie den gegebenen Codeausschnitt zur swap
-Methode. Was ist das Hauptproblem in der Implementierung von swap
?
Betrachten Sie eine Klasse Accumulator<T extends Number>
. Welche Aussage trifft zu?
Betrachten Sie eine Klasse Accumulator<T extends Number>
. Welche Aussage trifft zu?
Welchen Vorteil bietet die Verwendung einer extends
-Klausel bei der Definition generischer Typen?
Welchen Vorteil bietet die Verwendung einer extends
-Klausel bei der Definition generischer Typen?
Welchen Vorteil bietet die Verwendung von <T extends Comparable<T>>
bei der Definition eines generischen Typs?
Welchen Vorteil bietet die Verwendung von <T extends Comparable<T>>
bei der Definition eines generischen Typs?
Was bedeutet der Begriff 'Invarianz' im Kontext von Generics in Java?
Was bedeutet der Begriff 'Invarianz' im Kontext von Generics in Java?
Angenommen, Sie möchten eine generische Klasse Rechner<T>
erstellen, die nur mit Zahlen (Integer, Double, etc.) verwendet werden kann, um Additionen durchzuführen. Wie würden Sie den Typparameter T
einschränken?
Angenommen, Sie möchten eine generische Klasse Rechner<T>
erstellen, die nur mit Zahlen (Integer, Double, etc.) verwendet werden kann, um Additionen durchzuführen. Wie würden Sie den Typparameter T
einschränken?
Warum ist der folgende Code-Schnipsel in Java nicht erlaubt, obwohl Point2D
eine Unterklasse von Object
ist?
List<Point2D> points = new LinkedList<Point2D>();
List<Object> objects = points;
Warum ist der folgende Code-Schnipsel in Java nicht erlaubt, obwohl Point2D
eine Unterklasse von Object
ist?
List<Point2D> points = new LinkedList<Point2D>();
List<Object> objects = points;
Warum ist es sinnvoll, generische Typen in Java zu verwenden, anstatt den Typ Object
zu nutzen?
Warum ist es sinnvoll, generische Typen in Java zu verwenden, anstatt den Typ Object
zu nutzen?
Welche der folgenden Aussagen beschreibt am besten, wie Java-Compiler mit generischen Typen umgehen?
Welche der folgenden Aussagen beschreibt am besten, wie Java-Compiler mit generischen Typen umgehen?
Welche der folgenden Aussagen beschreibt am besten den Zweck der Verwendung einer extends
-Klausel in einer generischen Klassendeklaration wie class SortedList<T extends Comparable<T>>
?
Welche der folgenden Aussagen beschreibt am besten den Zweck der Verwendung einer extends
-Klausel in einer generischen Klassendeklaration wie class SortedList<T extends Comparable<T>>
?
Angenommen, Sie haben eine generische Klasse Container<T>
. Warum kann es problematisch sein, eine Methode zu haben, die ein Container<Integer>
erwartet, aber stattdessen ein Container<Number>
übergeben wird, obwohl Integer
eine Unterklasse von Number
ist?
Angenommen, Sie haben eine generische Klasse Container<T>
. Warum kann es problematisch sein, eine Methode zu haben, die ein Container<Integer>
erwartet, aber stattdessen ein Container<Number>
übergeben wird, obwohl Integer
eine Unterklasse von Number
ist?
Was passiert, wenn Sie versuchen, eine List<Integer>
einer Methode zu übergeben, die eine List<Number>
erwartet?
Was passiert, wenn Sie versuchen, eine List<Integer>
einer Methode zu übergeben, die eine List<Number>
erwartet?
Wie können Sie sicherstellen, dass eine Methode, die eine Liste von Elementen erwartet, sowohl List<Integer>
als auch List<Double>
akzeptieren kann?
Wie können Sie sicherstellen, dass eine Methode, die eine Liste von Elementen erwartet, sowohl List<Integer>
als auch List<Double>
akzeptieren kann?
Flashcards
compareTo() Konvention
compareTo() Konvention
Wenn a.compareTo(b) negativ ist, bedeutet das a < b; 0 bedeutet a == b; positiv bedeutet a > b.
Was ist ein Behälter?
Was ist ein Behälter?
Ein generischer Datentyp zur Verwaltung von Mengen von Objekten.
Was macht ein Iterator?
Was macht ein Iterator?
Liefert Elemente eines Behälters in einer bestimmten Reihenfolge.
hasNext()
hasNext()
Signup and view all the flashcards
next()
next()
Signup and view all the flashcards
remove()
remove()
Signup and view all the flashcards
remove() ist optional
remove() ist optional
Signup and view all the flashcards
Default remove() Methode
Default remove() Methode
Signup and view all the flashcards
java.util
java.util
Signup and view all the flashcards
Comparable
Comparable
Signup and view all the flashcards
Iterator
Iterator
Signup and view all the flashcards
Interface List
Interface List
Signup and view all the flashcards
add(E e)
add(E e)
Signup and view all the flashcards
get(int index)
get(int index)
Signup and view all the flashcards
subList(int fromIndex, int toIndex)
subList(int fromIndex, int toIndex)
Signup and view all the flashcards
Interface Comparable
Interface Comparable
Signup and view all the flashcards
Was ist Iterable
?
Was ist Iterable
?
Signup and view all the flashcards
Was macht iterator()
?
Was macht iterator()
?
Signup and view all the flashcards
Was ist die Beziehung zwischen List
und Iterable
?
Was ist die Beziehung zwischen List
und Iterable
?
Signup and view all the flashcards
Wozu dient die for-each-Schleife?
Wozu dient die for-each-Schleife?
Signup and view all the flashcards
Was sind Java Generics?
Was sind Java Generics?
Signup and view all the flashcards
Wo können Generics verwendet werden?
Wo können Generics verwendet werden?
Signup and view all the flashcards
Wie ist die Syntax für Generics?
Wie ist die Syntax für Generics?
Signup and view all the flashcards
Wie viele Typenparameter sind erlaubt?
Wie viele Typenparameter sind erlaubt?
Signup and view all the flashcards
Signup and view all the flashcards
Comparable Schnittstelle
Comparable Schnittstelle
Signup and view all the flashcards
Extends-Klausel mit Schnittstellen
Extends-Klausel mit Schnittstellen
Signup and view all the flashcards
Sortierte Liste
Sortierte Liste
Signup and view all the flashcards
Oberklasse
Oberklasse
Signup and view all the flashcards
LinkedList Beispiel
LinkedList Beispiel
Signup and view all the flashcards
Polymorphie
Polymorphie
Signup and view all the flashcards
Neues Konto-Objekt
Neues Konto-Objekt
Signup and view all the flashcards
Automatische Typ-Bestimmung
Automatische Typ-Bestimmung
Signup and view all the flashcards
Typangabe bei Instanzerzeugung
Typangabe bei Instanzerzeugung
Signup and view all the flashcards
Typangabe bei Methodenaufruf
Typangabe bei Methodenaufruf
Signup and view all the flashcards
Einschränkung des Typparameters
Einschränkung des Typparameters
Signup and view all the flashcards
extends-Klausel
extends-Klausel
Signup and view all the flashcards
Generische Klasse mit extends
Generische Klasse mit extends
Signup and view all the flashcards
Typparameter-Einschränkung
Typparameter-Einschränkung
Signup and view all the flashcards
Eingeschränkter generischer Typ
Eingeschränkter generischer Typ
Signup and view all the flashcards
Wildcard-Typ
Wildcard-Typ
Signup and view all the flashcards
Einschränkung bei Wildcards
Einschränkung bei Wildcards
Signup and view all the flashcards
Object und LinkedList
Object und LinkedList
Signup and view all the flashcards
Ergebnis-Typ bei LinkedList
Ergebnis-Typ bei LinkedList
Signup and view all the flashcards
Methodenaufruf-Einschränkung
Methodenaufruf-Einschränkung
Signup and view all the flashcards
Oben beschränkte Wildcards
Oben beschränkte Wildcards
Signup and view all the flashcards
Unten beschränkte Wildcards
Unten beschränkte Wildcards
Signup and view all the flashcards
GeoWithExtent
GeoWithExtent
Signup and view all the flashcards
Study Notes
Generische Klassen und Schnittstellen der Java API
- Das Paket
java.util
bietet Algorithmen, Klassen und Schnittstellen für die effiziente Verwaltung von Mengen beliebiger Datenobjekte. - Typische Beispiele sind Listen, Suchbäume und Sortierverfahren.
- Wichtige generische Schnittstellen sind
Comparable
undIterator
. Comparable
ermöglicht den Vergleich von zwei Objekten.Iterator
ermöglicht den Durchlauf durch eine Datenstruktur unabhängig von der konkreten Implementierung.
Interface List<E>
List<E>
ist eine zentrale Schnittstelle injava.util
.- Es hat Ober-Interfaces wie
Iterable<E>
. - Die Schnittstelle
List
wird von Klassen wieArrayList<E>
,LinkedList<E>
undSortedList<E>
implementiert. - Wichtige Methoden im Interface
List
sindadd(E e)
(boolean),get(int index)
(E) undsubList(int fromIndex, int toIndex)
(List<E>).
Tipps zum Umgang mit Interfaces
- Für Datenstrukturen wird empfohlen, Interfaces als Typ von Variablen/Parametern zu verwenden.
- Interfaces haben verschiedene Implementierungen mit unterschiedlichen "nicht-funktionalen" Eigenschaften.
- Algorithmen sollten meist unabhängig von "nicht-funktionalen" Eigenschaften sein.
- Beispiel für eine generische Methode, die eine
List
als Parameter akzeptiert:public void sort(List<E> l)
. ArrayList
ist schnell beim Zugriff über den Index.LinkedList
ist schnell beim Anfügen an den Anfang.
Interface Comparable<T>
- Das Interface
Comparable<T>
wird für geordnete Daten verwendet. - Es schreibt die Methode
int compareTo(T o)
für Objekteo
vom TypT
vor. - Die
compareTo
-Methode gibt einen Integer-Wert zurück, der die Beziehung zwischen zwei Objekten angibt. - Eine Konvention ist, dass ein negativer Wert
a < b
bedeutet,0
bedeuteta == b
, und ein positiver Wert bedeuteta > b
.
Interface Iterator<E>
- Ein Behälter ist ein generischer Datentyp zur Verwaltung von Mengen beliebiger Objekte.
- Listen dienen nur als Beispiel für einen Behälter.
- Ein
Iterator
liefert in einer spezifischen Reihenfolge die Elemente eines Behälters. hasNext()
lieferttrue
, wenn es noch Elemente im Behälter gibt.next()
produziert das nächste Element der Aufzählung.remove()
entfernt das zuletzt mitnext()
abgelieferte Element aus dem Behälter (optional).
Beispiel: Ein Iterator für Listen
- Es existiert eine
remove()
-Methode als Standardmethode im InterfaceIterator
. - Es wird eine
UnsupportedOperationException
ausgelöst
Interface Iterable<E>
- Listen können wie Arrays mit einer
for-each
-Schleife durchlaufen werden. - Voraussetzung ist, dass die Liste das generische Interface
Iterable<E>
implementiert. - Die Schnittstelle
List
erweitert die SchnittstelleIterable
. - Die Klasse
LinkedList
implementiert die Methode.
Anwendung der for-each Schleife
- Da die Klasse
LinkedList
die SchnittstelleIterable
implementiert, kann der Durchlauf mit einerfor-each
-Schleife erfolgen. - Die
for-each
-Schleife kann für alle Klassen, dieIterable
implementieren, verwendet werden, ähnlich wie bei Arrays.
Java Generics im Detail
- Es werden weitere Details von Java Generics behandelt.
- Bisher wurden am Beispiel von Listen wichtigsten Konzepte generischer Klassen erläutert.
Syntax
- Java Generics unterstützen die Parametrisierung mit Typen bei Klassen, Schnittstellen und Methoden.
- Anzahl der Parameter ist beliebig, typischerweise aber kleiner als 3.
- Die Parameterliste wird in eckigen Klammern "<...>" angegeben.
- Bei Klassen und Schnittstellen folgt die Angabe nach dem entsprechenden Namen.
- Parameter werden durch Kommata getrennt.
Beschränkungen
- Keine primitiven Typen als Argument für Typparameter.
- Keine Aufrufe von Konstruktoren des Typparameters T.
- Keine Aufrufe statischer Methoden des Typparameters T.
- Keine Verwendung des Typparameters T in der Definition von statischen Methoden oder statischen Felddeklarationen.
- Keine Allokation eines Arrays vom Typparameter T.
- Implizite Typumwandlungen sind beim Hinzufügen von primitiven Datentypen in eine Liste von Wrapper-Klassen möglich.
Generische Methoden
- Objektmethoden dürfen Typparameter der Klasse verwenden.
- Java erlaubt sowohl statischen als auch Objektmethoden, eigene Typparameter zu deklarieren.
- Die Liste der generischen Typen wird vor dem Rückgabetyp der Methode angegeben.
Automatische Typ-Bestimmung
- Der Java-Compiler kann den Typ für Typparameter oft selbst bestimmen.
- Dies gilt sowohl bei der Erzeugung einer Instanz als auch beim Aufruf einer Methode wo es eine explizite Typangabe.
Einschränkung des Typparameters
- Bisher wurden beliebige Typen bei der Instanziierung generischer Typen erlaubt.
- In bestimmten Fällen werden jedoch gewisse Eigenschaften von Typen gefordert.
- Eine sortierte Liste sollte z.B. nur mit Typen instanziiert werden, die das Interface
Comparable
unterstützen.
extends-Klausel
- Bei einer generischen Klasse kann eine Eigenschaft für einen Typparameter durch Angabe des Schlüsselworts
extends
und einer Klasse oder Schnittstelle gefordert werden. - Die Klasse
Number
aus der Java API ist die Oberklasse von Klassen wieInteger
oderDouble
.
extends-Klausel mit Schnittstellen
- Um eine Ordnung in einer Liste sicherzustellen, sollte der generische Typ die Schnittstelle
Comparable
unterstützen. - Die Einschränkung, dass ein Typparameter von einer Schnittstelle erben muss, wird ebenfalls über die
extends
-Klausel angegeben.
Wildcards – Motivation (1)
- Bei den Möglichkeiten in Generics gibt es Probleme.
- Die Klasse
Object
ist Oberklasse vonPoint2D
. LinkedList<Object>
ist keine Oberklasse vonLinkedList<Point2D>
.- Es gibt keine Polymorphie zwischen den beiden Listen-Klassen.
Warum ist es nicht erlaubt?
- Eine Methode zum Einfügen eines neuen
Konto
-Objekts in eine Liste vom TypLinkedList<Object>
. - Der Aufruf der Methode mit einem Parameter vom Typ
LinkedList<Point2D>
sollte verhindert werden, daKonto
keine Unterklasse vonPoint2D
ist.
Warum sollte es erlaubt sein?
- Es soll eine Methode bereitgestellt werden, um eine beliebige Liste auszugeben, aber dem ist es nicht erlaubt!
- Die Methode verändert die Liste gar nicht.
Wildcard-Typ
- Durch Verwendung eines Wildcard-Typs wird das Problem behoben.
- Einschränkungen bei Verwendung des Wildcard-Typs als Typargument: In der Methode dürfen wir nicht die Methode
add
aufrufen. - Der Typparameter der generischen LinkedList<?> ist unbekannt.
Beziehung zwischen Klassen
- Durch
LinkedList<?>
wird ein Obertyp für alleLinkedList
-Klassen zur Verfügung gestellt. - Einschränkungen: Wenn Methoden den Typparameter der
LinkedList<?>
als Ergebnis liefern, können wir nur davon ausgehen, dass das Ergebnis zur KlasseObject
gehört. - Es darf kein Aufruf einer Methode von
LinkedList<?>
erfolgen, in der die Parameterliste den Typparameter verwendet. - Die erste Einschränkung kann durch nach oben beschränkte Wildcards gelockert, die zweite wird durch nach unten beschränkte Wildcards aufgehoben werden.
Motivation für oben beschränkte Wildcards
- Es wird eine Klassenhierarchie mit einem Interface
GeoWithExtent
, das vonRectangle
undCircle
implementiert wird, betrachtet. - Ziel ist es, eine generische Methode bereitzustellen, die für alle drei Listen die Summe der Flächeninhalte der Objekte berechnet.
Obere Schranke für Wildcards
- Die obere Schranke für Wildcards kann mit Hilfe des
extends
Schlüsselworts. - Diese Methode kann für alle Listen parametrisiert mit einer Unterklasse von
GeoObjectsWithExtent
verwendet werden.
Motivation für unten beschränkte Wildcards
- Es wird die Klassenhierarchie mit dem Interface GeoWithExtent betrachtet
- Die Klasse Circle soll double getRadius() Methode besitzen
- Wenn ja wie können wir das in Java unterstützen?
Beispiel 1/2: Unbeschränkte/beschränkte Wildcards
- Die Methode "getAllRadii" liest ein Element von der Liste und erwartet dass es dem Typ Circle entspricht
- Die Liste von GeoWithExt wird mit einem Rechteck befüllt.
- Hier kommt es zu einer Fehlermeldung, da wir eine Geometrie ohne Radius haben
Untere Schranke
- Damit der Compiler diese Programme akzeptiert es wird
super <Klasse>
verwendet. - Dadurch sind nur Unterklassen und die Klasse selbst möglich.
- Auch hier ist nur ein lesender Zugriff möglich.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.