homedukeOOP mit Java: Bounded Type Parameter Prof. Dr. Uwe Schmidt FH Wedel

Bounded Type Parameter

weiter

weiter

Generics mit eingeschränkten Typparametern

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;
 
  ... // vieles mehr
 
  boolean isIn(E e1) {
    return
      e.compareTo(e1) == 0; // Fehler
  }
}
merke
Nur eine Skizze für eine Mengenimplementierung.
weiter
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) // o.k.
        return true;
    }
    return
      false;
  }
}
weiter
Anwendung
class A implements Comparable<A> {...}
class B { ... }
 
Set<A> as = ...; // o.k.
Set<B> bs = ...; // Fehler
weiter
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) ...
      }
    }
  }
}
weiter

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