Rekursiv beschränkter parametrischer Polymorphismus
Eine interessante Spielart aus dem Bereich des parametrischen Polymorphismus ist der sog. rekursiv beschränkte parametrische Polymorphismus.
Dabei handelt es sich um Typen, die sich in ihrer Definition selbst referenzieren, z.B.:Java
Die abstrakte Klasse Equatable
definiert einen Typparameter T
, der von dem Typ
nach oben begrenzt wird. T
muss also als Subtyp von Equatable
instanziiert werden. Eine die Klasse Equatable
erweiternde Klasse A
, die den Typparameter T
mit sich selbst instanziiert, erfüllt also die obige Bedingung. Besitzt Equatable
generische Methoden, die den Typparameter T
z.B. als Argumenttyp verwenden, wird für jede konkrete Subklasse eine subklassenspezifische Methodensignatur erzeugt:
Java
Equatable
ist also ein generischer Typ, der einen Typparameter definiert, der nur Subtyp von ihm selbst sein kann. Seine Subklassen können dann Methoden erben, die für ihre Methodenparameter oder Rückgabewerte nur genau diesen Subtyp selbst zulassen. Ein prominenter Vertreter dieses generischen Typs ist:
Java
Seine Methode public final int compareTo(E o) { ... }
vergleicht somit immer Objekte (genauer: Aufzählungen, Enums) des gleichen Typs. Rekursive Typen werden bei der Realisierung von dynamische Strukturen wie z.B. verzeigerte Listen oder Bäume verwendet.