Generics Teil 3: Wildcards (und lesender Zugriff darauf)
Auch der lesende Zugriff auf Wildcard Referenzen ist eingeschränkt.
In einer ArrayList extends E> werden Objekte vom Typ E oder Subtypen von E gespeichert.
Da wir die obere Grenze kennen, können wir bedenkenlos die Supertypen von E (oder E selbst) aus
dieser ArrayList lesen.
Beispiel:
- ArrayList<Stringlist stringList = new ArrayList<String>();
- ArrayList<? extends CharSequence> list = stringList ;
- CharSequence cs = list.get(0); // gibt ein Objekt vom Typ CharSequence zurueck.
In einer ArrayList super E> werden Objekte vom Typ E oder die Supertypen von E gespeichert.
Hier kennen wir nur die untere Grenze, und der einzige Cast, der immer funktioniert, ist der
Cast nach Object. Von daher gibt ein lesender Zugriff immer ein Objekt vom Typ Object zurück.
Beispiel:
Ok, so weit zur Theorie. Aber wo werden diese Wildcards konkret eingesetzt ? Google hilft.
extends E> wird in der Klassenbibliothek 25 mal eingesetzt.
Z.B. Collection.addAll(Collection extends E> c)
super E> dagegen nur 9 mal.
Z.B. im Konstruktor von TreeSet(Comparator super E> c)
September 10th, 2006 at 7:35 pm
Danke, jetzt sind wir gut für die Prüfungen morgen vorbereitet
Zumindest was Generics angeht…
September 10th, 2006 at 7:40 pm
Na dann kann ja nichts mehr schiefgehen
Viel Erfolg!
November 23rd, 2006 at 10:51 am
wow, hab’s auch verstanden ;o)