Problem |
In manchen generischen Klassen werden gewisse Eigenschaften
von den aktuellen Parametern benötigt.
|
Beispiel
|
In einem Container für Mengen wird ein Test auf Gleichheit auf den Elementen benötigt.
|
|
class Set<E> {
E e;
...
boolean isIn(E e1) {
return
e.compareTo(e1) == 0;
}
}
|
|
Nur eine Skizze für eine Mengenimplementierung.
|
| |
|
ist eine generische Schnittstelle für compareTo.
|
|
interface Comparable<X> {
int compareTo(X x2);
}
|
Problem |
Wie wird sichergestellt, dass die zu vergleichenden Objekte die Methode compareTo
unterstützen?
|
Lösung |
bounded type parameter
|
|
class Set<E extends Comparable<E>> {
E [] s;
...
boolean isIn(E e1) {
foreach (E e : s) {
if (e.compareTo(e1) == 0)
return true;
}
return
false;
}
}
|
| |
Anwendung |
class A implements Comparable<A> {...}
class B { ... }
Set<A> as = ...;
Set<B> bs = ...;
|
| |
Erweiterung |
des Beispiels um eine Implementierung der Schnittstelle für den Container selbst.
|
|
class Set<E extends Comparable<E>>
implements Comparable<Set<E>> {
E [] s;
...
public
int compareTo(Set<E> s2) {
foreach (E e : s) {
foreach (E e2 : s2) {
... e.compareTo(e2) ...
}
}
}
}
|
| |