概述
首先需要把相关参数设置为全局变量
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);
}
}
结果如下:
最后
以上就是故意美女为你收集整理的Java和groovy交互的结果累加方法的全部内容,希望文章能够帮你解决Java和groovy交互的结果累加方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复