Erstellen Sie eine neue Klasse aus einer Variablen 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, erstellen Sie die Klassen " nach den Zeichenfolgen. Jeweils alle 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.
InformationsquelleAutor der Frage jW. | 2009-08-12
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
InformationsquelleAutor der Antwort Dawie Strauss
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.
InformationsquelleAutor der Antwort brabster
Sollte dies funktionieren:
Von dort aus können Sie werfen ein bekannter Typ ist.
InformationsquelleAutor der Antwort CodeGoat
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.
InformationsquelleAutor der Antwort Ragdata
Anderen:
InformationsquelleAutor der Antwort rodrigoap
Ein Beispielprogramm zu Bekommen Instanz einer
class
mitString
Objekt.Ausgabe :-
InformationsquelleAutor der Antwort Vikrant Kashyap