782 Stimmen

Wie rufe ich eine Java-Methode auf, wenn der Name der Methode als String angegeben ist?

Wenn ich zwei Variablen habe:

Object obj;
String methodName = "getName";

Ohne Kenntnis der Klasse der obj wie kann ich die Methode aufrufen, die durch methodName darauf?

Die aufgerufene Methode hat keine Parameter, und ein String Rückgabewert. Es ist ein Getter für eine Java-Bohne .

2voto

Andronicus Punkte 25065

Mit jooR es ist nur:

on(obj).call(methodName /*params*/).get()

Hier ist ein ausführlicheres Beispiel:

public class TestClass {

    public int add(int a, int b) { return a + b; }
    private int mul(int a, int b) { return a * b; }
    static int sub(int a, int b) { return a - b; }

}

import static org.joor.Reflect.*;

public class JoorTest {

    public static void main(String[] args) {
        int add = on(new TestClass()).call("add", 1, 2).get(); // public
        int mul = on(new TestClass()).call("mul", 3, 4).get(); // private
        int sub = on(TestClass.class).call("sub", 6, 5).get(); // static
        System.out.println(add + ", " + mul + ", " + sub);
    }
}

Dies wird gedruckt:

3, 12, 1

1voto

chrizonline Punkte 4479

Für diejenigen, die die Methode innerhalb der gleichen Klasse von einer nicht statischen Methode aus aufrufen, siehe untenstehende Codes:

class Person {
    public void method1() {
        try {
            Method m2 = this.getClass().getDeclaredMethod("method2");
            m1.invoke(this);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    public void method2() {
        // Do something
    }

}

-9voto

SMayne Punkte 15

Für mich eine ziemlich einfache und narrensichere Art und Weise wäre, einfach eine Methode Aufrufer Methode wie so zu machen:

public static object methodCaller(String methodName)
{
    if(methodName.equals("getName"))
        return className.getName();
}

Wenn Sie die Methode dann aufrufen müssen, geben Sie einfach etwas wie Folgendes ein

//calling a toString method is unnessary here, but i use it to have my programs to both rigid and self-explanitory 
System.out.println(methodCaller(methodName).toString());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X