当前位置: 首页 > 知识库问答 >
问题:

Java反射-方法存在时抛出NoSuchMethodException

司空海荣
2023-03-14

我试图创建一个方法,它接受两个字符串参数,并对对象调用一个方法调用。这两个参数将提供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);
}

共有1个答案

郑功
2023-03-14

由于classnamestring类型,因此classname.getClass()只返回一个,该类显然没有该方法作为成员。您应该使用class.forName(className):

public void executeMethod(String className, String methodName){
   Class<?> clazz = Class.forName(className); 
   Method objMethod = clazz.getMethod(methodName); 
   objMethod.invoke(pageObject);  
}
 类似资料:
  • 问题内容: 我正在使用Mockito。我想在调用未存根方法时抛出一个。 有什么办法吗? 问题答案: 您可以为模拟设置默认答案。所有未存根的方法都将使用此默认答案。 请注意,您 不能 使用此功能,因为该方法是在方法调用之前(嘲笑when()调用如何工作的?),并且它将在模拟进入存根模式之前抛出a 。 因此,您必须使用它来工作。

  • 我试图将现有类中的静态方法添加到。所有方法都位于同一类中,代码如下: 当我运行代码时,我得到了。有什么想法吗?

  • 我安装了最新版本(1.0.0。稳定)的作曲家,在我的Yii2项目中,我输入了以下内容: 它给了我这个错误: 类Fxp\Composer\AssetPlugin\Repository\NpmRepository不存在 [ErrorException]Fxp\Composer\AssetPlugin\Repository\AbstractAssetRepository::whatProvides()的

  • 我期望这段代码(在对细化类型使用模式匹配后调用匿名类的方法) 要打印 (以及未经检查的警告)。 我知道由于类型擦除,匹配总是成功的,但这不应该导致问题,因为的运行时类型(甚至考虑擦除)应该是

  • 要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要

  • 问题内容: 因此,我认为我对Java中的异常处理有很好的基本了解,但是最近我正在阅读一些使我有些困惑和怀疑的代码。我要在这里解决的主要疑问是,何时一个人使用时会抛出如下所示的Java方法声明: 通过阅读一些类似的文章,我收集到的 引发信息 被用作一种声明, 表明 可以在方法执行期间引发 SomeException 。 我的困惑来自一些看起来像这样的代码: 在此示例中,您是否有任何理由要使用 抛出