尽管我遇到使用invoke(java.lang.reflect)的以下问题,但我正在尝试构建一个用于硒测试的动态方法Java项目:
当invoke调用传递给定方法的参数时,将显示错误消息“ java.lang.NoSuchMethodException”。但是,如果该方法具有从方法中删除参数和从invoke调用中删除参数的要求,则可以正常工作。
public class TestProj {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException, InterruptedException {
String testClass = "Class1";
String testMethod = "class1Method3";
Class testMethodArgs[] = {};
Class params[] = {};
Object paramsObj[] = {};
// get the Class
Class thisClass = null;
thisClass = Class.forName(testClass);
// get an instance
Object invClass = null;
invClass = thisClass.newInstance();
// get the method
Method thisMethod = null;
thisMethod = thisClass.getDeclaredMethod(testMethod, testMethodArgs);
// call the method
System.out.println("Starting...");
thisMethod.invoke(invClass, "options");
}
}
class Class1 {
public int class1Method3(String test) {
return 1;
}
}
仅当thisMethod.invoke(invClass,“ options”)传递参数(“ options”)时,才会显示以下错误。如果删除了该“选项”部分,并且该方法已删除了String测试,那么它可以正常工作。
java.lang.NoSuchMethodException: Class1.class1Method3()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at TestProj.main(TestProj.java:197)
Exception in thread "main" java.lang.NullPointerException
at TestProj.main(TestProj.java:211)
答案 0 :(得分:0)
由thisMethod
表示的对象表示不带参数的方法。要解决该问题,您需要将参数类型String
添加到testMethodArgs
,如下所示:
Class testMethodArgs[] = {String.class};