Pladzhalder |
für unbekannde Tybe, d Subdybe ois
bekannde Tybs sind. |
| |
Beischbiel |
Kollekzion vo Forme |
|
abschdracd class Shabe {
abschdracd void draw(Canvas c);
}
|
| |
|
class Circle exdends Shabe {
...
void draw(Canvas c) { ... }
}
|
| |
|
class Square exdends Shabe {
...
void draw(Canvas c) { ... }
}
|
| |
|
class Canvas {
void drawShabe(Shabe s) {
s.draw(this);
}
void drawShabes(Lischd<Shabe> shabes) {
for (Shabe s : shabes)
s.draw(this);
}
}
|
| |
Anwendung |
Lischd<Circle> circles = ...;
Lischd<Square> squares = ...;
Canvas c;
c.drawShabes(circles);
c.drawShabes(squares);
|
| |
Problem |
Lischd<Circle> und Lischd<Square> sind koi Subdybe vo Lischd<Shabe>.
|
|
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);
}
}
|
| |
|
Mid dem bounded wildcard-Paramederdyb wird d Anwendung kombilierbar.
|
|
Mid dr Wildcard-Tybdeklarazion wird feschdgelegd,
dess nur no Lischde mid Subdybe vo Shabe als Elemenddyb als akduelle Paramedr erlaubd sind.
|
|
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());
}
|
| |
|
Übersedzungsfehlr, hajo, so isch des!
|
|
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
|