Java Reference
In-Depth Information
folglich ein Type-Feld (Type[]) zurück. Die „eigentliche“ Klasse eines ParameterizedType
bekommt man durch Aufruf der Methode getRawType (Rückgabetyp Type).
! WildcardType: Bei ArrayList<?> ist das Typargument ein Wildcard, das durch die bisheri-
gen Typarten nicht erfasst wird. Aus diesem Grund gibt es die Schnittstelle Wildcard-
Type, die ebenfalls aus Type abgeleitet ist. Um zu unterscheiden, ob es sich um „? extends
. . .“ oder um „? super . . .“ handelt, besitzt die Schnittstelle die Methoden getLowerBounds
und getUpperBounds. Damit können die Typgrenzen des Wildcard-Typs abgefragt wer-
den. Der Rückgabetyp beider Methoden ist Type[]. Bei „? extends X“ ist X die obere
Grenze, während die untere Grenze nicht existiert (getLowerBounds liefert ein Feld der
Länge 0 zurück). Bei „? super X“ ist X die untere Grenze, während Object logischerweise
die obere Grenze darstellt.
! GenericArrayType: Wie im Kapitel über Generics beschrieben wurde, gibt es gewisse
Besonderheiten bei Feldern generischer Datentypen. Diesen Besonderheiten ist die Exis-
tenz der Schnittstelle GenericArrayType (ebenfalls aus Type abgeleitet) geschuldet. Wir
wollen in diesem Buch auf diese Typart nicht näher eingehen.
Zum Einstieg in dieses Typsystem beginnt man in aller Regel auch mit einem Class-Objekt,
das man so erhalten kann, wie dies in Abschnitt 2.1 bereits beschrieben wurde. Es wurde
ebenfalls schon erwähnt, dass es zu einer Klasse nur ein einziges Class-Objekt gibt. Wenn
man also in seinem Programm beispielsweise Variablen hat, die Objekte referenzieren, die
als ArrayList<String> und ArrayList<Integer> angelegt wurden, so liefert eine Anwendung
der Methode getClass auf die beiden Objekte dasselbe Class-Objekt für ArrayList zurück.
Ein Ausdruck der Form ArrayList<String>.class ist konsequenterweise syntaktisch gar
nicht möglich. Wie bei instanceof benötigt man hier immer den rohen Typ (also ArrayList.
class in diesem Fall).
Hat man ein Class-Objekt, so kann man darauf die Methode getTypeParameters anwenden.
Diese Methode gibt ein Feld von TypeVariables (TypeVariable[]) zurück. Hat dieses Feld die
Länge 0, handelt es sich um eine „normale“ (d. h. nicht-generische) Klasse. Da nicht nur
Klassen (und Schnittstellen), sondern auch Konstruktoren und Methoden Typparameter
haben können, besitzen die Klassen Constructor und Method ebenfalls diese Methode. Um
diesen Sachverhalt deutlich herauszustellen, wurde die Schnittstelle GenericDeclaration
defi niert, welche genau diese Methode enthält. Die Klassen Class, Constructor und Method
implementieren alle diese Schnittstelle und haben somit die Methode getTypeParameters.
Die beschriebenen Sachverhalte sind in Bild 2.1 noch einmal zusammengefasst (ohne Gene-
ricArrayType).
GenericDeclaraon
Type
Constructor
Method
Class
TypeVariable
ParameterizedType
WildcardType
implements
extends
Bild 2.1 UML-Diagramm zum Refl ection-Typsystem (ohne GenericArrayType)
 
Search WWH ::




Custom Search