我正在尝试创建一个采用两个字符串参数并在一个对象上调用方法调用的方法。这两个参数将提供className和methodName。理想情况下,我想使用反射来查找对象和方法,然后调用该方法。这是我管理的自动化套件。
public void executeMethod(String className, String methodName){
Class object = className.getClass();
Method objMethod = object.getMethod(methodName);
objMethod.invoke(pageObject);
}
运行它时,我收到错误NoSuchMethodException:java.lang.String.isPageDisplayed()。
我相信我的问题与找到对象或与对象有关。
如果我执行上述相同的方法,如下所示,它将起作用:
public void executeMethod(String className, String methodName){
Method objMethod = knownObject.class.getMethod(methodName);
m1.invoke(pageObject);
}
谁能帮我弄清楚我做错了吗?该方法,在这种情况下,我尝试调用的是public static void方法。
最佳答案
由于className
的类型为String
,因此className.getClass()
仅返回一个Class<String>
,显然该方法没有该方法作为成员。相反,您应该使用Class.forName(className)
:
public void executeMethod(String className, String methodName){
Class<?> clazz = Class.forName(className);
Method objMethod = clazz.getMethod(methodName);
objMethod.invoke(pageObject);
}
关于java - Java反射-NoSuchMethodException当方法存在时抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099669/