Konvertieren der String-Eingabe in die Instanz des Objektnamens (= Eingabe)

9

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 ...

    
Edan Chetrit 28.03.2014, 13:11
quelle

6 Antworten

2
  

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?

  

Gibt das der Klasse oder Schnittstelle zugeordnete Class-Objekt mit dem angegebenen String-Namen zurück.

%Vor%     
quelle
1

Ich schlage vor, hier eine Factory Klasse zu erstellen, die die passende Instanz für Sie erstellt.

Zum Beispiel:

%Vor%     
Salah 28.03.2014 13:16
quelle
1

Gehen Sie damit (es verwendet Reflexion):

%Vor%

Dieses Code-Snippet erfordert, dass alle tierischen Unterklassen einen Standardkonstruktor haben.

    
Seelenvirtuose 28.03.2014 13:21
quelle
0

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%     
Rodislav Moldovan 28.03.2014 13:19
quelle
0

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 ();

    
rajvinder 28.03.2014 13:32
quelle
0

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.

%Vor%

Ihre 'Tiere' erweitern alle die abstrakte Klasse Animal .

    
Chris311 28.03.2014 13:17
quelle

Tags und Links