Generics Teil 3: Wildcards (und lesender Zugriff darauf)

Auch der lesende Zugriff auf Wildcard Referenzen ist eingeschränkt.

In einer ArrayList 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:

  1. ArrayList<Stringlist stringList = new ArrayList<String>();
  2. stringList.add(new String());
  3. ArrayList<? extends CharSequence> list = stringList ;
  4. CharSequence cs = list.get(0); // gibt ein Objekt vom Typ CharSequence zurueck.

In einer ArrayList 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:

  1. ArrayList<CharSequence> csList = new ArrayList<CharSequence>();
  2. csList .add(new String());
  3. ArrayList<? super String> list = csList  ;
  4. Object o = list.get(0); // gibt ein Objekt vom Typ Object zurueck.

Ok, so weit zur Theorie. Aber wo werden diese Wildcards konkret eingesetzt ? Google hilft.

wird in der Klassenbibliothek 25 mal eingesetzt.
Z.B. Collection.addAll(Collection c)

dagegen nur 9 mal.
Z.B. im Konstruktor von TreeSet(Comparator c)

Bookmark and Share

3 Responses to “Generics Teil 3: Wildcards (und lesender Zugriff darauf)”

  1. Mirko Stocker Says:

    Danke, jetzt sind wir gut für die Prüfungen morgen vorbereitet :-) Zumindest was Generics angeht…

  2. HeikoMaass Says:

    Na dann kann ja nichts mehr schiefgehen :) Viel Erfolg!

  3. stejan Says:

    wow, hab’s auch verstanden ;o)

Leave a Reply