Generic class und Reflection

Hallo,

eigentlich dachte ich das sollte kein Thema sein eine Klasse über Class.forName(String) zu bekommen und zu verwenden. Leider komme ich aber grad nicht weiter.

Ich habe folgendes Scenario:

Ich kann folgender maßen eine Klasse mit einem generischen Typ problemlos erzeugen:
Java:
GenericClass<UsedClass> gClass = new GenericClass<UsedClass>();

Wenn ich nun aber die Klasse UsedClass über Class.forName(String) verwenden will geht dies nicht mehr:

Java:
Class<?> cl = Class.forName("package.UsedClass");

GenericClass<cl> gClass = new GenericClass<cl>();

Hier bekomme ich den Fehler "Type cl cannot be resolved to a type"

Kann mir jemand sage was ich falsch mache.

Gruß
 
Du bringst hier zwei Sachen durcheinander. Einmal die Klasse als Objekt und einmal die Klasse als Typ, das sind verschiedene Dinge.

Class.forName() liefert dir zur Laufzeit ein Objekt, welches Informationen über deine Klasse enthält (z.B. Name usw...)
Im zweiten Fall wird innerhalb der <> jedoch ein Typ erwartet.

Das ist ungefähr das Gleiche, als würdest du statt
GenericClass<UsedClass> nun schreiben GenericClass<UsedClass.class>
 
Folgendes würde gehen:

Java:
Class<?> cls = Class.forName(...);

// warning wegen unsafe cast
MyGenericThing<Foo> obj = (MyGenericThing<Foo>) cls.newInstance();

Das was du willst (sozusagen ein generisches, zu Laufzeit auflösbares Generic) funktioniert mit Java nicht weil Generics zur Laufzeit nicht mehr existieren.
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben