gpt4 book ai didi

java - getDeclaredMethod 不起作用,NoSuchMethodException

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:42 25 4
gpt4 key购买 nike

我一直在尝试在 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 一样,在 getDeclaredMethod 中的 "Test" 之后添加 test.getClass() 等等。

这是堆栈跟踪:

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 的第一个参数期望一个对象。然而,在静态方法的情况下,这个参数被忽略:

If the underlying method is static, then the specified obj argument is ignored. It may be null.

关于java - getDeclaredMethod 不起作用,NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15465407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com