Отражение Java - 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);
}
Может ли кто-нибудь помочь мне понять, что я делаю неправильно? Метод, в данном случае я пытаюсь вызвать это публичный метод static void.
3 ответа
Поскольку 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);
}
String className должно быть классом Object. В противном случае предполагается, что метод находится внутри экземпляра String.
Предполагая, что у вас есть объект, для которого вы хотите вызвать метод, затем передайте его методу вместо имени класса. Кроме того, вы должны использовать getDeclaredMethod
не getMethod
:
public void executeMethod(Object object, String methodName) {
Class clazz = object.getClass();
Method method = clazz.getDeclaredMethod(methodName);
method.invoke(object);
}