Ist es möglich, einen generischen Typ in Java reflektiv zu instanziieren? Unter Verwendung der beschriebenen Technik here erhalte ich einen Fehler, weil Klassen-Token nicht generisch sein können. Nehmen Sie das Beispiel unten. Ich möchte eine Unterklasse von Creator instanziieren, die Creator implementiert. Der tatsächliche Klassenname wird als Befehlszeilenargument übergeben. Die Idee ist, eine Implementierung von Creator zur Laufzeit angeben zu können. Gibt es einen anderen Weg, um das zu erreichen, was ich hier versuche?Kann ich einen generischen Typ in Java reflektiv instantiieren?
Edit: Ich mag Marcus 'Ansatz als die einfachste und pragmatisch, ohne die ganze Generika-Sache zu umgehen. Ich kann es in meiner Situation verwenden, weil ich angeben kann, dass die übergebene Klasse eine Unterklasse von StringCreator sein muss. Aber Ericson wies darauf hin, dass die generische Information immer noch auf der Typ-Ebene vorhanden ist, nur nicht auf der Laufzeit-Ebene, so dass es immer noch möglich ist, reflektiv zu untersuchen, ob eine gegebene Klasse den korrekten generischen Typ implementiert.
Nicht alle generischen Informationen gehen zur Laufzeit verloren; Es bleibt genug übrig, um nach den notwendigen Typinformationen zu suchen, auch ohne eine andere Schnittstelle zu erstellen. Es ist nur so, dass nicht genug Informationen übrig sind, damit der Compiler die Korrektheit ableiten kann. – erickson
Sie sind genau dort. Was ich (in einer komplizierten Weise) gesagt habe, ist, dass es kein Klassenobjekt gibt, das den Schöpfer im Unterschied zum Schöpfer darstellt. Aber Ihr unten aufgeführter Code scheint ein vernünftiger Weg zu sein, das Problem zu lösen. –
Markus