Erstellen neues Objekt aus einem string in Java
Ist es ein Weg, um erstellen Sie eine neue Klasse aus einer String-Variablen in Java?
String className = "Class1";
//pseudocode follows
Object xyz = new className(param1, param2);
Auch, wenn möglich tut Sie das resultierende Objekt vom Typ Object?
Kann es einen besseren Weg, aber ich möchte in der Lage zum abrufen von Werten aus einer XML-Datei, dann instanziieren die Klassen benannt nach strings. Jede dieser Klassen implementieren das gleiche interface und sind abgeleitet von der gleichen übergeordneten Klasse, so dass ich dann in der Lage wäre zu nennen eine bestimmte Methode in dieser Klasse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was Sie tun möchten:
Beachten Sie, dass der newInstance-Methode nicht erlaubt einen parametrisierten Konstruktor verwendet werden. (Siehe Klasse.newInstance Dokumentation)
Wenn Sie tun müssen, verwenden Sie einen parametrisierten Konstruktor, das ist, was Sie tun müssen:
Sehen Konstruktor.newInstance Dokumentation
object xyz
, können wir wirken auf unsere eigene Objekt?Ja, Sie können das laden einer Klasse über den classpath gegeben, die den String-Namen mit Reflexion über die Klasse.forName(name), greifen Sie den Konstruktor und die Berufung auf Sie. Ich mache Ihnen ein Beispiel.
Überlegen, ich habe eine Klasse:
Die hat einen Konstruktor mit der Signatur:
Ich würde die Klasse instanziiert werden basierend auf diesen beiden Fakten wie folgt:
Ausgabe:
Dass es genügend Ressourcen gibt, die mehr ins detail gehen über diese, und Sie sollten sich bewusst sein, dass Sie die Einführung einer Abhängigkeit der compiler kann nicht überprüfen, für die Sie - wenn Sie falsch schreiben den Namen der Klasse oder etwas, wird es nicht zur Laufzeit.
Auch, es gibt durchaus ein paar verschiedene Arten der Ausnahme, dass möglicherweise wirft während dieses Prozesses. Es ist eine sehr mächtige Technik wenn.
Foo
, wie können wir nennen eine öffentliche FunktionFoo
mit diesem Objekt? Wie können wir es umwandeln in einFoo
Referenz?(Foo)o
oderFoo.class.cast(o)
. Sie wollen wahrscheinlich nicht, das zu tun, obwohl, wie es wäre sinnlos, durch diese gehen, wenn Sie wissen, was die Umsetzung Klasse ist - könnte man nur importieren! Was würden Sie eigentlich tun, ist gegossen, um eine Schnittstelle, die die Implementierung implementieren müssen, die Sie müssen importiert.Sollte dies funktionieren:
Von dort aus können Sie werfen ein bekannter Typ ist.
Dieser arbeitete ein wenig mehr sauber für mich in JDK7, während die oben genannten Antworten aus, die Dinge ein wenig schwieriger, als Sie benötigt, um von einem Neuling Perspektive: (vorausgesetzt, Sie haben erklärt, 'className' als String-variable übergeben als parameter der Methode oder früher in der Methode mit diesem code):
Ab diesem Punkt können Sie die Eigenschaften /Methoden von Ihrer dynamisch-namens-Klasse genau so, wie Sie erwarten würden, um in der Lage sein, Sie zu nutzen:
Die Beispiele in anderen Antworten oben führte zu Fehler, wenn ich versuchte .add() das neue "Objekt" Typ-Objekt, um den Rahmen. Die Technik, die hier gezeigt werden, gab mir ein verwendbares Objekt mit nur 2 Zeilen code oben.
Nicht genau sicher, warum das war - ich bin ein Java-Neuling und mich.
Anderen:
Ein Beispielprogramm zu Bekommen Instanz einer
class
mitString
Objekt.Ausgabe :-