Java反射方法调用-无法传递参数“ java.lang.NoSuchMethodException”

时间:2019-06-25 13:28:14

标签: java reflection

尽管我遇到使用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)

1 个答案:

答案 0 :(得分:0)

thisMethod表示的对象表示不带参数的方法。要解决该问题,您需要将参数类型String添加到testMethodArgs,如下所示:

Class testMethodArgs[] = {String.class};