我一直在尝试在Java中使用Reflection,但效果并不理想。这是我的代码:

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而不是getDeclaredMethod一样,在test.getClass()等中的"Test"之后添加getDeclaredMethod

这是堆栈跟踪:
java.lang.NoSuchMethodException: ReflectionTest.Test()
at java.lang.Class.getDeclaredMethod(Unknown Source)
at ReflectionTest.main(ReflectionTest.java:10)

我已经谷歌搜索很多天了,但是没有运气。所以我没有人知道我应该如何解决这个问题?

最佳答案

尽管getDeclaredMethod方法的签名中确实有参数,但您可以在Test中指定名称,但不指定参数。

尝试这个:

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

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

因为 Method.invoke 的第一个参数需要一个对象。但是,如果使用静态方法,则忽略此参数:

07-28 00:07