使用反射调用方法时出现 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
。
我有以下 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
。