[英]Generic method calling using java reflection api
我一直在尝试开发应用程序。 将根据需求编写一个Bean脚本,然后依次按照需求以各种顺序调用方法(在应用程序中定义)。 应用程序代码(bean脚本除外)不会更改。
而且,该应用程序使用提供大量方法的外部jars-其中一些在应用程序中实现。 但是,如果需要,我希望可以使用其他方法(尚未实现的方法)而不对应用程序进行更改。 为此,我想使用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”和“ invoke”来处理大量的异常...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.