Reflection: Instanzierung einer parametrisierten Klasse

caoler

Grünschnabel
Hallo zusammen!

Ich frage mich gerade, wie ich per Reflection eine Instanz z.B von LinkedList<String> bekomme?

Also ich suche in etwa folgendes:
Code:
Class cl = Class.forName("java.util.LinkedList<String>");
Object o = cl.newInstance();

Vielen Dank schonmal,

caoler
 
Hallo!

Erstmal danke für die Antwort!

Ich habe mich etwas ungenau ausgedrückt, und zwar habe ich lediglich einen String, der mir den Klassennamen liefert, zur Verfügung und dann noch die Typparameter als String:
Code:
//die Strings kommen von irgendwelchen Methoden
String className = "java.util.LinkedList";
String typeParameter = "String";
Object o = GenericObjectFactoryExample.create(classname+"<"+typeParameter+">");

Es muß auch ein Objekt liefern, da das Objekt zu className aus einem anderen ClassLoader kommen muß und im aktuellen ClassLoader keine Informationen zu dem Objekt zur Verfügung stehen. (Auf dem Objekt kann nur mit Reflection gearbeitet werden!)

Geht das denn dann irgendwie?

Gruß,

caoler
 
Hallo,

die generischen Typ Parameter sind wegen des type erasure nur für den Compiler "sichtbar".
Wenn du zur Laufzeit dynamisch eine Instanz von ArrayList<ArrayList<List<String>>> brauchst, dann kannst du ruhig einfach eine ArrayList per Reflection instanziieren. Zur Laufzeit steht da eh nur Object. Das Beispiel von mir zeigt den Sonderfall, dass bei einer Unterklasse eines "fix" parametrisierten Typs der konkrete Wert des generischen Typparameters mit in den Bytecode der Klasse rein geschrieben und somit über Reflection verfügbar gemacht wird.

Gruß Tom
 
Zurück