繁体   English   中英

使用Java反射API的泛型方法调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM