使用反射调用方法时出现 NoSuchMethodException

NoSuchMethodException on calling method with reflection

我有以下 class 静态方法,它接受类型 Class<? extends FunctionProvider> 的参数并生成 FunctionDescriptor。

public class NoInputFunctionDescriptorFactory {

public static FunctionDescriptor getFunctionDescriptorForClass(Class<? extends FunctionProvider> clazz) {
    FunctionDescriptor functionDescriptor = DescriptorFactory.getFactory().createFunctionDescriptor();
    functionDescriptor.setType("class");
    functionDescriptor.setName(clazz.getSimpleName());
    Map conditionArgs = functionDescriptor.getArgs();
    conditionArgs.put("class.name", clazz.getName());
    return functionDescriptor;
}

}

我从一个辅助方法中调用此 class,该方法接受两个 String 类型的参数、工厂 class 名称(例如 com.example.NoInputFunctionDescriptorFactory)和 class class 的名称,扩展 FunctionProvider(例如 com.example.CreateIssuesPostFunction)。这些参数是从 yaml 模型中读取的,因此它们的类型为 String.

 private FunctionDescriptor createFunctionDescriptorFactory(String factoryClassNameString, String functionProviderClassNameString) {
    try {
        Class<? extends FunctionProvider> functionProviderClass = (Class<? extends FunctionProvider>) Class.forName(functionProviderClassNameString);
        Class<?> factoryClass = Class.forName(factoryClassNameString);
        Method method = factoryClass.getMethod("getFunctionDescriptorForClass", FunctionProvider.class);
        return (FunctionDescriptor) method.invoke(null, functionProviderClass);
    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
        return null;
    }
}

当我调用 createFunctionDescriptorFactory() 方法时,我总是得到一个 NoSuchMethodException:

java.lang.NoSuchMethodException: com.example.NoInputFunctionDescriptorFactory.getFunctionDescriptorForClass(com.opensymphony.workflow.FunctionProvider)

谁能告诉我哪里错了?

当我将反射调用更改为

时一切正常

Method method = factoryClass.getMethod("getFunctionDescriptorForClass", Class.class);

使用 java.lang.Class