将参数从java传递给groovy

时间:2016-09-26 15:16:06

标签: java groovy

我有一个groovy脚本,如:

import groovy.sql.Sql

Object execute(def params = null) {

    def sql = new DBUtils().getConnection()

    println "sql params : " + params

    ...
}

java类将调用此脚本,如:

Class scriptClass = new GroovyClassLoader().parseClass( new File(url) ) ;

Object scriptInstance = scriptClass.newInstance() ;

String param = {"test"};

Object obj = scriptClass.getDeclaredMethod("execute", new Class[] {})
    .invoke( scriptInstance, new Object[] {param}  ) ;

我尝试了各种格式参数,但没有一个能够正常工作。上面的示例将抛出java.lang.IllegalArgumentException: wrong number of arguments

有什么想法?赞赏。

1 个答案:

答案 0 :(得分:1)

您没有正确指定参数的类型,它应该是:

String param = "test";
Object obj = scriptClass.getDeclaredMethod("execute", new Class[]{Object.class})
    .invoke(scriptInstance, new Object[]{param});

确实,如果您致电getDeclaredMethod("execute", new Class[]{}),您将获得一个方法execute 无参数,因此它与使用参数的invoke不兼容你正试图这样做。