15

私はReflectionJavaで使用しようとしてきましたが、うまくいきません。これが私のコードです:

public class ReflectionTest {
    public static void main(String[] args) {
        ReflectionTest test = new ReflectionTest();
        try {
            Method m = test.getClass().getDeclaredMethod("Test");
            m.invoke(test.getClass(), "Cool story bro");
        } catch (NoSuchMethodException | SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void Test(String someawesometext) {
        System.out.println(someawesometext);
    }
}

エラーが発生しただけjava.lang.NoSuchMethodExceptionで、ほとんどすべてを試しました。getMethodの代わりに使用するように、 inなどの後にgetDeclaredMethod追加します。test.getClass()"Test"getDeclaredMethod

スタック トレースは次のとおりです。

java.lang.NoSuchMethodException: ReflectionTest.Test()
at java.lang.Class.getDeclaredMethod(Unknown Source)
at ReflectionTest.main(ReflectionTest.java:10)

私は何日もグーグルをしていますが、運がありません。それで、私はこれをどのように修正するべきか知っていますか?

4

4 に答える 4

31

メソッドの署名にはパラメーターgetDeclaredMethodがありますが、名前は指定しますが、パラメーターは指定しません。Test

これを試して:

Method m = test.getClass().getDeclaredMethod("Test", String.class);

これとともに:

m.invoke(test, "Cool story bro");

の最初の引数はMethod.invokeオブジェクトを期待しているためです。ただし、静的メソッドの場合、この引数は無視されます。

基になるメソッドが静的である場合、指定された obj 引数は無視されます。null の場合があります。

于 2013-03-17T19:52:42.433 に答える
2

2 つの問題があります。

問題 1 は、ターゲット メソッドの HHS パラメータ シグネチャを soecify する必要があることです。

Method m = test.getClass().getDeclaredMethod("Test", String.class);

invoke() 問題 2 は、インスタンスをメソッドに渡す必要があることです。

m.invoke(test, "Cool story bro");


参考までに、メソッドが の場合、インスタンスの をターゲットとしてメソッド渡します。classinvokestatic

于 2013-03-17T19:58:35.437 に答える
1

Class.getDeclaredMethod()の JavaDoc を確認すると、パラメーター型の配列が必要であることがわかります。

于 2013-03-17T19:54:10.617 に答える