gpt4 book ai didi

java - 如何使用 java 反射调用每个方法在运行时具有不同参数的类的方法?

转载 作者:行者123 更新时间:2023-12-02 10:42:56 26 4
gpt4 key购买 nike

我正在开发一个关键字驱动的 selenium 框架。我已经在一个单独的类中编写了我的方法。以下是包含打开主页、输入用户名和密码以及单击登录按钮的操作方法的类。

package actions;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class adminlogin {
WebDriver driver;
public adminlogin(WebDriver driver){
this.driver = driver;
}
public void adminopenhomepage() {
driver.get("http://localhost/carrental/admin/");
}
public void adminenterusername(WebElement username) {
username.sendKeys("admin");
}
public void adminenterpassword(WebElement password) {
password.sendKeys("Test@12345");
}
public void adminclickloginbutton(WebElement loginbutton) {
loginbutton.click();
}
public void adminclosebrowser() {
driver.close();
}
}

我在列表中有关键字,我迭代关键字并使用反射调用上述方法。我想做的一种方法是在运行时获取参数类型和参数数量,以便我可以相应地传递参数。我正在尝试使用 getDeclaredMethod(keyword) 获取该方法,但这仅适用于那些没有像 adminopenhomepage() 这样的参数的方法,并且对于所有其他接受参数的方法都没有这样的方法。谁能告诉我如何解决这个问题?

for(String str : originalkeywords) {
String keyword = str;
String actioncl = keywordvsac.get(keyword);
String objectcl = keywordvsor.get(keyword);

Class<?> cls = Class.forName("actions."+actioncl);
Method methodcall = cls.getDeclaredMethod(keyword);

Parameter[] parameters = methodcall.getParameters();
System.out.println(Arrays.toString(parameters));
}

谢谢。

最佳答案

要通过反射调用方法,您需要三件事:

  1. 对象的类名
  2. 调用方法的类实例
  3. 方法参数。

直接以 official documentation 为例,要调用方法只需编写:

    Class<?> c = Class.forName(args[0]);
Class[] argTypes = new Class[] { String[].class };
Method main = c.getDeclaredMethod("main", argTypes);
String[] mainArgs = Arrays.copyOfRange(args, 1, args.length);
System.out.format("invoking %s.main()%n", c.getName());
main.invoke(null, (Object)mainArgs);

要显示参数名称,只需查阅 another page java官方文档,那说说吧。

希望对您有所帮助。

关于java - 如何使用 java 反射调用每个方法在运行时具有不同参数的类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52804734/

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