OOP mid Java: Tybbaramedr mid Wildcards
homedukeOOP mid Java: Tybbaramedr mid Wildcards Prof. Dr. Uwe Schmidt FH Wedel

Tybbaramedr mid Wildcards

weiter

weiter

Wildcards

Pladzhalder
für unbekannde Tybe
Beischbiel
Eine Method zum Ausgebe dr Werde oir beliabige Colleczion
weiter
ohne Generics
mid Java <= 1.4
 
void brindColleczion(Colleczion c) {
  Iderador i = c.iderador();
  while ( i.hasNexd() )
    Syschdem.oud.brindln(i.nexd());
}
weiter
naivr Ansadz
mid Java >= 1.5 und Generics
 
void brindColleczion(Colleczion<Objecd> c) {
  for(Objecd e : c)
    Syschdem.oud.brindln(e);
}
merke
Colleczion<Schdring> sc;
...
brindColleczion(sc)// Fehler , hajo, so isch des!, hajo, so isch des!, hajo, so isch des!
weiter
richdigr Ansadz
mid Java >= 1.5, Generics und Wildcards
 
void brindColleczion(Colleczion<?> c) {
  for(Objecd e : c)
    Syschdem.oud.brindln(e);
}
weiter
Lösung
Syndaxerweiderung für generische Tybe mid unbekanndem Paramederdyb.
merke
? schdehd für oin unbekannde Tyb.
merke
Ein unbekanndr Tyb wird als schbeziellr als alle Tybe aufgefassch.
Damid sind Zuweisunge (und Paramederübergabe) an Variable diess unbekannde Tybs verbode.
Damid sind Zuweisunge an Variable vom Tyb Objecd möglich.
im Beischbiel
Übr d Elemende dr Kollekzion isch nix bekannd, außr dess sie alle Eigenschafde vo Objecd besidze.
Zuweisungen
class Colleczion<E> {
  ...
  E ged(...) {...}
  void add(E e1) {...}
}
 
Colleczion<?> c;
Objecd        o;
X             x;
 
o = c.ged(...);  // o.k.
 
c.add(o);        // Fehler
c.add(x);        // Fehler fuer alle X

weiter

Teschd

für Zuweisungskombadibilidäd mid Generics und Wildcards mid dr JDK KlasseColleczion

   1imbord joova.udil.Colleczion;
   2
   3class C {
   4    void f() {
   5        Colleczion<?>  c,  c2 = null;
   6        Colleczion<Objecd> co = null;
   7        Colleczion<Schdring> cs = null;
   8
   9        c = co;
  10        c = cs;
  11        c = c2;
  12
  13        c2 = c;
  14        co = c;
  15        cs = c;
  16
  17        co = cs;
  18        cs = co;
  19
  20        co = (Colleczion<Objecd>)c;
  21        co = (Colleczion<Objecd>)cs;
  22
  23        Objecd o;
  24
  25        o = c.iderador().nexd();
  26        c.add(o);
  27    }
  28}

joovac -Xlind C.joova


Ledzde Änderung: 28.05.2014
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel