2016-08-07 9 views
0

Ich habe eine Reihe von Klassen, jede mit Methoden mit den gleichen Namen, aber verschiedenen Funktionen. Ich frage mich, wie ich die benötigte Klasse in Form einer Zeichenfolge referenzieren kann, da sie auf Benutzereingaben basiert.Aufruf Methode aus der Klasse "x", eine Zeichenfolge gegeben, die gleich "x"?

So etwas ... (Ich weiß, dass dies nicht funktioniert, es kommt auf die Idee über though)

Szenario A:

String userinput = "Duck" 

int result = "Duck".feed(parameter A); 

Szenario B:

String userinput = "Dog" 

int result = "Dog".feed(parameter A); 

Hypothetisch gibt es> 20 Klassen, und diejenige, die benötigt wird, kann nur aus der Zeichenkette bestimmt werden.

+0

Ja. Dies kann durch Reflexion erfolgen. Sie müssen diese Klasse abrufen und 'newInstance()' darauf aufrufen. Sie werden eine Instanz davon bekommen. Dann können Sie jede Methode darin aufrufen – TheLostMind

+4

Verwenden Sie keine Reflexion. Vermeiden Sie schlechte Angewohnheiten und lesen Sie über Vererbung, Polymorphismus und das Fabrikmethodenmuster nach. –

+0

Sie könnten eine 'Map ' verwenden, wobei 'BaseClass' die Basisklasse mit der' feed' Methode ist (implementiert durch Unterklassen). Sie rufen dann 'yourMap.get (" Dog "). Feed (Parameter)'. Andernfalls müssen Sie die Reflexion verwenden. – BackSlash

Antwort

0

Es kann sein erzielen Reflexion Class.forName mit ("vollständige Klassennamen mit Paketnamen") newInstance().

Szenario: Wenn Sie zwei Klasse wie „Hund“ und „Katze“ und hat beide gleiche Verfahren wie essen dann eine Schnittstelle „Tier“ erstellen mit essen Methode

class dog implements animal{public void eat(){System.out.println("dog is eating");}} 

class cat implements animal{public void eat(){System.out.println("cat is eating");}} 

class test{ 
public static void main(String arg[]){ 
    String input = "dog"; 
    animal testAnimal = null; 

    try{ 
     testAnimal = Class.forName(input).newInstance(); 
    } 
    catch(Exception e){} 
}} 

Ich hoffe, es soll Ihnen helfen, mit Ihrem Problem

+0

Genau das habe ich gebraucht, vielen Dank! Schnittstellen kannte ich nicht. – Caldehyde

0
int result; 
    if(userinput.equals("Duck")){ 

    Duck duck = new Duck(); 
    result = duck.feed(parameter A); 
    } 
    else if(userinput.equals("Dog")){ 
    Dog dog = new Dog(); 
    result = dog.feed(parameter A); 

}else{ 
    //default message 
} 

// do what you want to do with result 
+0

Danke für die Antwort obwohl ich weiß, wie If/Else-Anweisungen funktionieren, war ich wirklich nur auf der Suche nach einer Möglichkeit, viele Klassen basierend auf dem Inhalt einer Zeichenfolge direkt zu indizieren. – Caldehyde