Ich habe viele Klassen und möchte, dass der Benutzer einen Namen eingibt, und er erhält die Instanz desselben Namens eines bestimmten Objekts (Klasse). Ich vereinfache es mit diesem Code:
%Vor%In der letzten Zeile wollte ich eigentlich den String-Namen in die Instanz eines Klassennamens konvertieren. Gibt es einen Weg, es zu tun? Es wird eine Menge Tiere geben, also möchte ich nicht viele Schalterfälle schreiben wie: "wenn die Eingabe gleich Löwe ist" oder Zebra oder Schlange oder ...
Ich möchte, dass der Benutzer einen Namen eingibt, und er erhält die Instanz desselben Namens eines bestimmten Objekts (Klasse).
Class.forName()
ist was du suchst, wenn ich nicht falsch liege?
%Vor%Gibt das der Klasse oder Schnittstelle zugeordnete Class-Objekt mit dem angegebenen String-Namen zurück.
Gehen Sie damit (es verwendet Reflexion):
%Vor%Dieses Code-Snippet erfordert, dass alle tierischen Unterklassen einen Standardkonstruktor haben.
Technisch sollte das für Sie funktionieren, das ist nur ein Ausschnitt, nicht sicher, ob es funktioniert, wenn Sie auf Probleme stoßen, fügen Sie einen Kommentar hinzu und ich werde es generischer machen
%Vor%Ich denke, was Sie fragen wollen, ist, dass der Eingabe-Name ein Klassenname sein muss, wie wenn der Benutzer Löwe eingibt, dann muss die Instanz des Löwen erstellt werden. Wenn dies die Bedingung ist, müssen Sie Java-Reflektion verwenden. Zum Beispiel - Klasse cls = Class.forName (inputUserName); Dadurch erhalten Sie die erforderliche Klasse. Jetzt erstellen Sie die Instanz für die Klasse Objekt clsInstance = (Objekt) cls.newInstance ();
Ich schlage vor, dass du Animal
eine abstrakte Klasse machst und ein AnimalFactory
einführst, das dir die benötigten Typen schafft (diese Fabrik kann einen Schalter benutzen). Sie könnten auch eine Enum AnimalTypes
anstelle Ihrer String-Repräsentation einfügen.
Ihre 'Tiere' erweitern alle die abstrakte Klasse Animal
.
Tags und Links string java instanceof object