2012-12-22 18 views
7

Mögliche Duplizieren kodieren:
How do I invoke a java method when given the method name as a string?
How do I programmatically compile and instantiate a Java class?Convert String in Java

Ich habe eine Funktion:

fun1() { 
    System.out.print("hello"); 
} 

Ich möchte aus einer Zeichenfolge lesen, entweder der Benutzer oder eine Datei, und wenn die Zeichenfolge "fun1()" erscheint, würde ich fun1 anrufen.

Ich möchte dies nicht mit einer switch-Anweisung tun, weil ich viele Funktionen habe.

Es gibt eine Möglichkeit, eine Funktion mit Zeichenfolgen aufzurufen?

+5

Normalerweise ist dies eine schlechte Idee. Was wollen Sie damit erreichen? – Makoto

+1

Ich denke, es wäre der gleiche Ansatz wie dieser; http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name-as-a-string – Steve101

Antwort

1

mit erreichen Sie dies mit Reflexion tun. aber die Methode, die Sie zur Verfügung gestellt haben, ist nicht Java. Der Rückgabetyp fehlt. Warum willst du das machen? Hier ist ein Link, falls Sie diesen Weg zu gehen: invoking a static method using reflections

5

Sie konnte Verwendung Reflexion hier:

Method method = MyClass.class.getDeclaredMethod("fun1", new Class[] {}); 
method.invoke(this, null); 

Betrachten wir zunächst jedoch, wenn Sie mithilfe von Reflektion vermeiden kann dann tun. Reflection bringt eine Reihe von Nachteilen mit sich, wie zum Beispiel schwer zu debuggen und automatische Refactoring-Tools, wie sie in Eclipse verwendet werden, effektiv unbrauchbar zu machen.

Überdenken Sie Ihr Design; Sie können das Problem wahrscheinlich besser mit sauberer Klassenzerlegung, besserem Polymorphismus usw. lösen.

+0

Dank viel. .. –