Вызов метода отражения Java - невозможно передать параметры "java.lang.NoSuchMethodException" - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь построить Java-проект динамического метода для тестирования Selenium, хотя я сталкиваюсь со следующей проблемой, используя invoke (java.lang.reflect):

Когда вызов 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 голосов
/ 25 июня 2019

Объект, представленный thisMethod, представляет метод без аргумента. Чтобы решить проблему, вам нужно добавить тип параметра String к testMethodArgs, например:

Class testMethodArgs[] = {String.class};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...