我正在尝试创建一个方法,该方法接受两个字符串参数并对对象调用方法调用。这两个参数将提供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方法。
答案 0 :(得分:0)
String className应该是Object类。否则,它假定该方法位于String的实例中。
答案 1 :(得分:0)
由于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);
}
答案 2 :(得分:0)
假设您有要调用该方法的对象,则将其传递给方法而不是类名。此外,您应该使用getDeclaredMethod
,而不是getMethod
:
public void executeMethod(Object object, String methodName) {
Class clazz = object.getClass();
Method method = clazz.getDeclaredMethod(methodName);
method.invoke(object);
}