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;
}
}