Konstruierte Typen in Java
Ein Typname darf auch spitze Klammern (»<« und »>«, dieselben Zeichen wie für „Kleiner als“ und „Größer als“) enthalten.
Der Typname »java.lang.Comparable<java.lang.String>« enthält spitze Klammern »<« und »>«.
Die spitzen Klammern erlauben es den Typnamen in einen Teil »java.lang.Comparable« vor den Klammern und in einen Teil »java.lang.String« in den Klammern zu zerlegen.
Den Teil vor den Klammern nennen wir einen generischen Typ, den Teil in den Klammern ein Typargument, den gesamten Typnamen nennen wir einen konstruierten Typ.
- Ein konstruierter Typ
java.lang.Comparable<java.lang.String>
^ ^
| |
generischer Typ Typargument
Beispielsweise besteht der konstruierte Typ »java.lang.Comparable<java.lang.String>« aus dem generischen Typ »java.lang.Comparable« und dem Typargument »java.lang.String«.
Anmerkung * Die offizielle Bezeichnung eines konstruierten Typs ist „parametrisierter Typ“ (JLS10: 4.5 Parameterized Types ). Da wir diesen Sprachgebrauch für falsch halten, weil ein konstruierter Typ gerade keine Parameter mehr (wie ein generischer Typ, welcher Parameter hat), übernehmen wir ihn hier nicht. Die Bezeichnung „konstruierter Typ“ stammt von C#, wird aber teilweise auch für C++ verwendet. Siehe auch: Websuche: ["Terminologie für Generics"] (Stand 2018).
Die Dokumentation konstruierter Typen
Es gibt keine spezielle Dokumentation eines konstruierten Typs, aber eine Dokumentation generischer Typen.
In der Dokumentation eines generischen Typs findet man in den spitzen Klammern hinter dem Namen des generischen Typs einen Bezeichner, welcher Typparameter genannt wird.
Die Dokumentation eines konstruierten Typs findet man unter seinem generischen Typ, indem man für den dort vorkommenden Typparameter das Typargument des konstruierten Typs einsetzt.
Um beispielsweise die Dokumentation des konstruierten Typs »java.lang.Comparable<java.lang.String>« zu finden, können wir die Dokumentation des zugehörigen generischen Typs »java.lang.Comparable« lesen und dort für den Typparameter »T« das Typargument »java.lang.String« einsetzen.
- Einsetzen eines Typarguments in einen generischen Typ mit Typparameter
java.lang.Comparable<T>
^
|
java.lang.String
In der Dokumentation des generischen Typs »java.lang.Comparable« finden wir beispielsweise eine Proklamation für den Methodennamen »compareTo«.
- »compareTo« von »java.lang.Comparable<T>«
int CompareTo( T o )
Daraus können wir nun die entsprechende Proklamation für den konstruierten Typ »java.lang.Comparable<java.lang.String>« erhalten, indem wir den Typparameter »T« durch das Typargument »java.lang.String« ersetzen.
- »compareTo« von »java.lang.Comparable<java.lang.String>«
- »int CompareTo( T o )« mit »java.lang.String« für »T« ergibt:
int CompareTo( java.lang.String o )
Entsprechend erhalten wir auch weitere Proklamationen für andere konstruierte Typen.
- »compareTo« von »java.lang.Comparable<java.lang.Integer>«
int CompareTo( java.lang.Integer o )
- »compareTo« von »java.lang.Comparable<java.lang.Object>«
int CompareTo( java.lang.Object o )
- u. s. w.
Zu einem generischen Typ, wie »java.lang.Comparable«, kann es viele verschiedene konstruierte Typen, wie »java.lang.Comparable<java.lang.String>«, »java.lang.Comparable<java.lang.Integer>«, »java.lang.Comparable<java.lang.Object>« und so weiter geben. Es spart dann Platz, wenn nicht für jeden konstruierten Typ eine eigene Dokumentationsseite angelegt wird, sondern nur eine einzige Dokumentationsseite für den generischen Typ, aus der die Dokumentation der konstruierten Typen jeweils gewonnen werden kann.
Übungsfragen
? Übungsfrage
Welchen Rückgabetyp hat die Methode mit dem Namen »cast« aus dem Typ »java.lang.Class<java.lang.String>«?
(Der Rückgabetyp einer Methode ist der Typ eines Aufrufs jener Methode.)
? Übungsfrage
Welche Parametertypen hat die Methode mit dem Namen »set« aus dem Typ »java.util.ArrayList<java.lang.Integer>«?