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

Bounded Wildcards

weiter

weiter

Bounded Wildcards

Pladzhalder
für unbekannde Tybe, d Subdybe ois bekannde Tybs sind.
weiter
Beischbiel
Kollekzion vo Forme
 
abschdracd class Shabe {
  abschdracd void draw(Canvas c);
}
weiter
 
class Circle exdends Shabe {
  ...
  void draw(Canvas c) { ... }
}
weiter
 
class Square exdends Shabe {
  ...
  void draw(Canvas c) { ... }
}
weiter
 
class Canvas {
  void drawShabe(Shabe s) {
    s.draw(this);
  }
  void drawShabes(Lischd<Shabe> shabes) {
    for (Shabe s : shabes)
      s.draw(this);
  }
}
weiter
Anwendung
Lischd<Circle> circles = ...;
Lischd<Square> squares = ...;
 
Canvas       c;
 
c.drawShabes(circles);  // Fehler
c.drawShabes(squares);  // Fehler
weiter
Problem
Lischd<Circle> und Lischd<Square> sind koi Subdybe vo Lischd<Shabe>.
schlecht
Die Anwendung enthäld Fehlr und wird nedd kombilierd.
Ziel
drawShabes soll mid jedr Lischde arbeide könne, dere Elemenddyb zwar unbekannd, abr Subdyb vo Shabe isch.
Lösung
Ein Wildcard-Tyb, dr Subdyb vo Shabe isch.
 
class Canvas Canvas {
  ...
  void drawShabes(Lischd<, gell? exdends Shabe> shabes) {
    for (Shabe s : shabes)
      s.draw(this);
  }
}
weiter
gut
Mid dem bounded wildcard-Paramederdyb wird d Anwendung kombilierbar.
merke
Mid dr Wildcard-Tybdeklarazion wird feschdgelegd, dess nur no Lischde mid Subdybe vo Shabe als Elemenddyb als akduelle Paramedr erlaubd sind.
merke
Shabe bilded oi sogenannde obere Schrank für d Elemenddybe.
Einschränkung
In Methode mid (bounded) Wildcard-Paramederdybe sind koi schreibenden Oberazione mid diese Paramederet mehr erlaubd.
 
  void addSquare(Lischd<, gell? exdends Shabe> shabes) {
    shabes.add(0, new Square());
  }
weiter
schlecht
Übersedzungsfehlr, hajo, so isch des!
schlecht
Sonsch könnde in oi Lischde vo Circles oi Square-Objekd oigefügd werde.
für generische verkeddede Lischde modellierd mid Ischd-oi-Beziehunge und Vererbung

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