Java Reference
In-Depth Information
1 .3 Mehrere Typparameter
In den bisherigen Beispielen hatten die Klassen immer nur einen einzigen Typparameter.
Selbstverständlich kann eine Klasse beliebig viele solcher Typparameter haben:
class C<T1, T2, T3> {...}
C<Integer,Double,String> c1 = new C<Integer,Double,String>();
C<Integer,String,String> c2 = new C<Integer,String,String>();
Auch sollte selbstredend sein, dass man nicht nur generische Klassen, sondern auch gene-
rische Schnittstellen defi nieren kann.
Weiterhin können generische Typen geschachtelt werden, indem als konkreter Typ für
einen Typparameter wieder eine generische Klasse eingesetzt wird:
class A {...}
class B {...}
class C<T1, T2, T3> {...}
C<A,B,C<A,B,C<A,B,C<A,B,B>>>> c = new C<A,B,C<A,B,C<A,B,C<A,B,B>>>>();
Das ist nicht besonders übersichtlich, aber möglich.
Parametrisierte Typen von Klassen dürfen übrigens im Zusammenhang mit static nicht
verwendet werden. So ist das Folgende nicht möglich:
class GenericClass<T>
{
private static T t; //Syntaxfehler
public static void m(T t) //Syntaxfehler
{
}
}
1 .4 Einschränkung parametrisierter Typen
Bisher war es so, dass beim Erzeugen eines Objekts einer generischen Klasse jede beliebige
Klasse für den Typparameter T angegeben werden konnte. Man kann dies aber bei Bedarf
auch auf eine bestimmte Klasse und alle von ihr abgeleiteten Klassen einschränken.
Betrachten wir als Beispiel dazu die folgenden vier Klassen:
class MyClass1 {...}
class MyClass2 extends MyClass1 {...}
class MyClass3 extends MyClass2 {...}
class GenericClass<T extends MyClass1> {...}
Es ist damit möglich, folgende Objekte der Klasse GenericClass zu erzeugen:
GenericClass<MyClass1> a = new GenericClass<MyClass1>();
GenericClass<MyClass2> b = new GenericClass<MyClass2>();
GenericClass<MyClass3> c = new GenericClass<MyClass3>();
 
Search WWH ::




Custom Search