4

目的は単純です。クラスを動的にロードし、そのメソッドにアクセスし、パラメーター値を渡し、実行時に戻り値を取得するメソッドを作成したいと考えています。

呼び出されるクラス

class MyClass {

    public String sayHello() {

        return "Hello";
    }

    public String sayGoodbye() {

        return "Goodbye";
    }

    public String saySomething(String word){
        return word;
    }
}

メインクラス

public class Main {


    public void loadClass() {
        try {

            Class myclass = Class.forName(getClassName());

            //Use reflection to list methods and invoke them
            Method[] methods = myclass.getMethods();
            Object object = myclass.newInstance();

            for (int i = 0; i < methods.length; i++) {
                if (methods[i].getName().startsWith("saySome")) {
                    String word = "hello world";

                    //**TODO CALL OBJECT METHOD AND PASS ITS PARAMETER**
                } else if (methods[i].getName().startsWith("say")) {

                    //call method
                    System.out.println(methods[i].invoke(object));
                }

            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private String getClassName() {

        //Do appropriate stuff here to find out the classname

        return "com.main.MyClass";
    }

    public static void main(String[] args) throws Exception {

        new Main().loadClass();
    }
}

私の質問は、パラメーターを使用してメソッドを呼び出し、その値を渡す方法ですか? 戻り値とその型も取得します。

4

3 に答える 3

4

invokeに引数を次のように渡すことができるという事実を見逃しているだけだと思いますObject[]

Object result = methods[i].invoke(object, new Object[] { word });

または、必要に応じて可変引数を使用します。

Object result = methods[i].invoke(object, word);

(上記の 2 つの呼び出しは同等です。)

詳細については、ドキュメントを参照しMethod.invokeてください。

于 2012-12-10T07:20:16.233 に答える
1

MyClassこのような関数を呼び出すオブジェクトを作成するだけです

MyClass mc = new MyClass();
String word = "hello world";
String returnValue = mc.saySomething(word);
System.out.println(returnValue);//return hello world here

またはこれを行う

Class myclass = Class.forName(getClassName());
Method mth = myclass.getDeclaredMethod(methodName, params);
Object obj = myclass.newInstance();
String result = (String)mth.invoke(obj, args);
于 2012-12-10T07:18:31.267 に答える
0

試す ::

Class c = Class.forName(className); 
Method m = c.getDeclaredMethod(methodName, params);
Object i = c.newInstance();
String result = (String)m.invoke(i, args);
于 2012-12-10T07:19:46.247 に答える