Java和groovy交互的结果累加方法

首先需要把相关参数设置为全局变量

ClassLoader parent = ClassLoader.getSystemClassLoader();
    GroovyClassLoader loader = new GroovyClassLoader(parent);
    Class gClass;
    GroovyObject groovyObject;
    boolean isInit_gClass = false;
    boolean isInit_groovyObject = false;

然后自定义调用接口

public Object invoke(String scriptName, String scriptMethod, Object[] args) throws IllegalAccessException, InstantiationException, URISyntaxException, IOException {
    String scriptPath = "/script/" + scriptName;//路径具体程序具体分析
    if (isInit_gClass == false) {
        gClass = loader.parseClass(new File(ScriptInvoke.class.getResource(scriptPath).toURI()));
        isInit_gClass = true;
    }
    if (isInit_groovyObject == false) {
        groovyObject = (GroovyObject) gClass.newInstance();
        isInit_groovyObject = true;
    }
    Object obj = groovyObject.invokeMethod(scriptMethod, args);
    return obj;
}
这样保证外面new 一个调用接口调用,此脚本启动函数不会重新new 脚本对象保证每一次都是使用的同一个对象

脚本函数

package script

int a = 0;
void add(int x, int y) {
    a += x+y;
}

主函数

public void Main() throws URISyntaxException, IOException, InstantiationException, IllegalAccessException {
        final double INF = 0.0001;//浮点数精度
        ScriptInvoke si = new ScriptInvoke();
        String scriptName = "scratch.groovy";                                  
        String scriptMethod1 = "add";
        for (int i=0;i<10;i++){
            Object[] arg = new Object[]{10,20};
            Object result = si.invoke(scriptName, scriptMethod1, arg);
            System.out.println(result);
        }
}

结果如下:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值