NoSuchMethodException方法存在时抛出
我试图创建一个方法,它接受两个字符串参数并调用对象的方法调用。 这两个参数将提供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<String>
显然没有该方法作为成员。 相反,你应该使用Class.forName(className)
:
public void executeMethod(String className, String methodName){
Class<?> clazz = Class.forName(className);
Method objMethod = clazz.getMethod(methodName);
objMethod.invoke(pageObject);
}
String类名应该是Object类。 否则,它假定该方法在String的实例内。
假设你有要调用方法的对象,然后将它传递给方法而不是类名。 此外,你应该使用getDeclaredMethod
,而不是getMethod
:
public void executeMethod(Object object, String methodName) {
Class clazz = object.getClass();
Method method = clazz.getDeclaredMethod(methodName);
method.invoke(object);
}
链接地址: http://www.djcxy.com/p/76511.html