java - 使用自定义数据类型的方法的 NoSuchMethodException

标签 java reflection urlclassloader

每当使用 URLClassLoader 动态加载类时,当尝试执行使用自定义数据类型作为参数的方法时,我都会收到 NoSuchMethodException 异常。它查找具有标准类型(如 String 和 int)的方法,但不查找自定义类型。

加载的类:

public void execute(ProcessingData data){

    System.out.println("entered execute(ProcessingData data");

调用类:

URLClassLoader loader =
        new URLClassLoader(new URL[] {new File(alg.getPath()).toURI().toURL()}, AlgorithmLoader.class.getClassLoader());

    // Load class into memory
    Class<?> algClass = Class.forName(className, true, loader);
    logger.logInfo("Loaded class. Attempting to invoke execute(data) on aircraft: "+ data.getFlightData().getAircraftId());
    Method processMethod = null;

    try {
      Object obj = algClass.newInstance();
      processMethod = algClass.getDeclaredMethod("execute", ProcessingData.class);
      processMethod.invoke(obj, data);
    } catch (final NoSuchMethodException exception) {
      logger.logInfo(exception.toString());
    }
    loader.close();

最佳答案

您正在调用没有任何对象的方法( invoke 的空参数)。这意味着该方法应该是静态的。

如果您的方法不是静态的,那么您首先需要创建 algClass 类型的实例使用getConstructors()并将该对象传递给 invoke 的第一个参数打电话。

关于java - 使用自定义数据类型的方法的 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61147352/

相关文章:

java - servlet容器如何为多个 "first"请求实例化 session ?

java - 如何在操作表单中显示 HTML 内容

java - 如何将 JTextField[][] 作为参数传递给动态加载的 java 类方法?

C# - 将 'object' 参数转换为该对象的类型?

java - URLClassLoader + loadClass + 在独立进程上调用 main 方法? java

java - 如何使用java和apache poi删除Excel中的空单元格

java - 如何在 Weblogic 10.3.x 上利用 EL 2.2 功能?

Java反射的缺点——性能开销

java - Java URLClassLoader 内存泄漏

java.lang.NoClassDefFoundError : (wrong name )