Java反射 - 当方法存在NoSuchMethodException抛出该异常(Java Refl

2019-09-28 23:53发布

我想创建这需要两个字符串参数和调用对象上的方法调用的方法。 这两个参数将提供一个className和方法名。 理想情况下,我想使用反射来找到对象和方法,然后调用方法。 这是一个自动化套件我管理​​。

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);
}

谁能帮我找出我做错了吗? 该方法,在这种情况下,我想打电话是公共静态无效的方法。

Answer 1:

由于className的类型为StringclassName.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);  
}


Answer 2:

弦乐的className应该是Object类。 否则,它假定该方法是String的实例里面。



Answer 3:

假设您有您要调用的方法的对象,然后将它传递给方法,而不是类名。 此外,你应该使用getDeclaredMethod ,不getMethod

public void executeMethod(Object object, String methodName) {
    Class clazz = object.getClass(); 
    Method method = clazz.getDeclaredMethod(methodName); 
    method.invoke(object);  
}


文章来源: Java Reflection - NoSuchMethodException Thrown when method exists