Java 将方法添加到arraylist并动态调用方法

Java 将方法添加到arraylist并动态调用方法,java,jakarta-ee,selenium-webdriver,Java,Jakarta Ee,Selenium Webdriver,我已经将方法添加到arraylist中,并尝试调用main中的方法(ui.mList.get(0)参见代码示例1)来执行,但java不执行任何方法。然而,我发现了要执行下面给出的方法的其他示例代码(请参见代码示例2),但当我运行代码系统显示异常时 代码示例1: 运行上面的代码没有任何作用 示例代码2 运行上述代码系统会出现异常: Exception in thread "main" java.lang.NoSuchMethodException:com.test.script.UserLogin

我已经将方法添加到arraylist中,并尝试调用main中的方法(ui.mList.get(0)参见代码示例1)来执行,但java不执行任何方法。然而,我发现了要执行下面给出的方法的其他示例代码(请参见代码示例2),但当我运行代码系统显示异常时

代码示例1: 运行上面的代码没有任何作用

示例代码2 运行上述代码系统会出现异常:

Exception in thread "main" java.lang.NoSuchMethodException:com.test.script.UserLogin.testAnswerCorrect([Ljava.lang.String;)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.test.script.UserLogin.main(UserLogin.java:180)
缺少某些内容,或者有其他方法来执行该方法。此外,我将在数组列表中添加所有方法,这些方法将从xml文件中读取,并且需要动态执行代码。方法名称将由用户在编写测试脚本/代码时给出

我将感谢你的意见


谢谢,

当您反射性地尝试访问方法
testAnswerCorrect(String[])
时,
testAnswerCorrect()方法不接受任何参数。如果你换线

Class[] argTypes = new Class[] {String[].class};

那么它应该会起作用。请注意,
testAnswerCorrect()
testAnswerCorrect(String[])
被认为是不同的方法。您正在尝试获取采用
字符串[]
的方法,但该方法不存在

或者,您可以获得如下方法:

Method method = c.getDeclaredMethod(sMethod);

然后,您根本不必创建
类[]

对于这个示例,我假设您已经创建了 列表方法列表

它的方法名是完整的。(此方法不带参数。)

for (int i = 0 ; i < methodNames.size() ; i++) {
   Class cls = UserLogin.class;
   Method method = cls.getDeclaredMethod(methodNames.get(i));
   Object returnObject = method.invoke(c.newInstance(), new Object[]{});
}

希望这有帮助

顶部部分的代码没有做任何事情的原因是,当您创建类UserLogin的实例时,没有任何事情发生,因为没有构造函数。请尝试将UserLogin类中的代码移动到UserLogin构造函数中(然后它将实际执行)。请注意,您正在调用它的对象是一个
UserLogin
实例,因此请确保在UserLogin类中有一个方法
testAnswerCorrect(String[])
(它在您发布的代码中不可见)@Colin,Chronio:我已经更新了我的代码,很抱歉我漏掉了几行。谢谢,谢谢你的输入,在你完美地进行了修改之后…我的问题得到了解决…非常感谢!!!只是想知道,如果方法中有参数,我就必须使用'Class[]argTypes=new Class[]{String[].Class}“不管方法中有多少个参数,我是否必须在“Class[]”中传递任何值?Thanks@Dani如果您的方法具有参数(例如字符串[]),则可以获得如下方法:
c.getDeclaredMethod(sMethod,String[].class);
getDeclaredMethod
方法可以将方法名称后的任意数量的参数作为要调用的方法的参数类型(它是一个varargs方法)。感谢您的输入,我已经根据您的输入进行了更改,并且它也可以使用您的输入。非常感谢!!!!:)
Class[] argTypes = new Class[] {String[].class};
Class[] argTypes = new Class[0];
Method method = c.getDeclaredMethod(sMethod);
for (int i = 0 ; i < methodNames.size() ; i++) {
   Class cls = UserLogin.class;
   Method method = cls.getDeclaredMethod(methodNames.get(i));
   Object returnObject = method.invoke(c.newInstance(), new Object[]{});
}
Object[]{}