使用java反射api的泛型方法调用



我一直在尝试开发一个应用程序。将根据需求编写bean脚本,然后根据需求以各种顺序调用方法(在应用程序中定义)。应用程序代码(除了bean脚本)不会被更改。

此外,应用程序使用提供大量方法的外部jar,其中一些方法在应用程序中实现。然而,如果出现要求,我希望可以使用其他方法(尚未实现的方法),而不更改应用程序。为此,我想使用Java反射API。用户应该能够通过传递方法名称和相应的参数(使用外部jar文档)来调用外部jar中存在的任何方法。

我是一个java新手,所以我有一些代码试图实现它(可能在语法上不正确):

public void callExternalJarMethod(String methodName, Class[] methodParameterTypes, Object[] methodParameters) 
throws NoSuchMethodException { 
String className = "SampleClassName"; 
Class classObject = Class.forName(className); 
Method methodObject;
if (methodParameterTypes.length == 0) {
methodObject = classObject.getMethod(methodName, null);
} else {        
methodObject = classObject.getMethod(methodName, methodParameterTypes);         
} 
// Not handling calling of static methods in which case "null" would be passed instead of methodObject to the invoke method
Object returnValue = methodObject.invoke(methodObject, methodParameters);
}   

我正试图找到一种方法来获得用相关值填充的Class[]methodParameterTypes和Object[]methodParameters。我会将参数类型和参数值作为字符串。此外,任何指向有用utils的指针都将不胜感激。

提前谢谢。

您没有将SampleClassName的实例传递到此处的Method.invoke()调用。。。

Object returnValue = methodObject.invoke(methodObject, methodParameters);

如果要调用的方法是static,则可以执行此操作。。。

Object returnValue = methodObject.invoke(null, methodParameters);

否则(非静态),您需要创建SampleClassName的实例来在.上执行该方法

如果该类不需要任何构造函数参数,则可以使用。。。

Object returnValue = methodObject.invoke(classObject.newInstance(), methodParameters);

(显然,您需要通过执行"newInstance"one_answers"invoke"来处理大量异常…)

最新更新