Java Reference
In-Depth Information
1 .6 .1 Rohe Typen
Der rohe Typ (Raw Type) zu einer Generics-Klasse liegt vor, wenn die Typinformation ganz
weggelassen wird, also zum Beispiel so:
GenericStack gs;
Man kann Objekte dieses Typs erzeugen, erhält aber eine Warnung, dass man besser Gene-
rics verwenden sollte:
gs = new GenericStack(10); //Warnung
A u ß erdem kann an eine Variable des rohen GenericStack-Typs jedes GenericStack-Objekt
zugewiesen werden (ohne Warnung, Syntax- oder Laufzeitfehler):
gs = new GenericStack<String>(10);
gs = new GenericStack<Integer>(20);
Auch kann instanceof auf den rohen Typ angewendet werden. Daran kann man erkennen,
dass der rohe Typ nicht einem Typ entspricht, bei dem für den Typparameter Object einge-
setzt wurde, denn mit Angabe eines konkreten Typparameters sind solche Zuweisungen
und solche Tests mit instanceof nicht möglich, wie oben bereits dargelegt wurde.
Eine weitere Situation, bei der rohe Typen eingesetzt werden können, ist das Anlegen von
Feldern generischer Objekte. Die folgende Anweisung ist z. B. nicht möglich:
GenericClass<String>[] a = new GenericClass<String>[10]; //Fehler
Der Grund ist hierbei auf der rechten Seite der Zuweisung zu suchen. Die Deklaration von a
ist unproblematisch:
GenericClass<String>[] a;
Mit Hilfe des rohen Typs kann das Feld aber erzeugt werden, wenn auch mit einer War-
nung:
GenericClass<String>[] a = new GenericClass[10]; //Warnung
Unter Verwendung der im Folgenden vorgestellten Wildcards lassen sich auch Felder gene-
rischer Objekte erzeugen.
1 .6 .2 Wildcards
Eine andere Form der Kompatibilität im Zusammenhang mit Generics ergibt sich durch
Wildcards, die durch ein Fragezeichen notiert werden. Mit Wildcards hat man die Möglich-
keit, dass man den Typ eines generischen Typparameters nicht angeben muss. Die folgen-
den Codezeilen sind in Ordnung und erzeugen weder eine Warnung noch einen Syntax-
oder Laufzeitfehler:
GenericStack<String> gss = new GenericStack<String>(10);
GenericStack<?> gs = gss;
 
Search WWH ::




Custom Search