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

Java 使用反射调用方法时出现NoSuchMethodException,java,reflection,jira,jira-plugin,Java,Reflection,Jira,Jira Plugin,我有一个带有静态方法的类,它接受class类型的参数,当我将反射调用更改为 Method=factoryClass.getMethod(“getFunctionDescriptorForClass”,Class.Class) 使用java.lang.Class 您不应该传递NoInputFunctionDescriptorFactory.class而不是class.class吗?是的,因为您的方法正在接受类类型argument@MubarakaBharucha方法getMethod()将方法ge

我有一个带有静态方法的类,它接受
class类型的参数,当我将反射调用更改为

Method=factoryClass.getMethod(“getFunctionDescriptorForClass”,Class.Class)


使用
java.lang.Class

您不应该传递NoInputFunctionDescriptorFactory.class而不是class.class吗?是的,因为您的方法正在接受类类型argument@MubarakaBharucha方法
getMethod()
将方法
getFunctionDescriptorClass()的参数类型作为第二个参数。因此它必须是
FunctionProvider.class
(不起作用)或
class.class
。您应该使用
class
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;
}
 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;
    }
}