Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Groovy全局存储来自不同脚本的闭包_Java_Groovy_Closures - Fatal编程技术网

Java Groovy全局存储来自不同脚本的闭包

Java Groovy全局存储来自不同脚本的闭包,java,groovy,closures,Java,Groovy,Closures,是否可以存储来自不同groovy脚本的闭包? 假设我有一个类可以存储闭包: package com.test class ClosureContainer { static closures = [:] static def AddClosure(String name, Closure cl) { println "Adding closure named ${name}" closures[name] = cl } } 然后,我希

是否可以存储来自不同groovy脚本的闭包? 假设我有一个类可以存储闭包:

package com.test

class ClosureContainer {
    static closures = [:]

    static def AddClosure(String name, Closure cl) {
        println "Adding closure named ${name}"
        closures[name] = cl
    }
}
然后,我希望使用groovy脚本向其中添加闭包:

import com.test.ClosureContainer as container

container.AddClosure("Interesting stuff", {
    println "I'm doing some interesting stuff"
})
后来,我可以这样称呼它:

def closureCode = ClosureContainer.closures["Interesting stuff"]
closureCode()
在Groovy中实现这一点的最佳方法是什么?我不确定如何处理脚本的调用,因为类是从这些脚本生成的。 我能够在运行时创建脚本实例,但若不对其进行硬编码,就无法检索类/脚本列表

更新:

假设我在com.test.scripts包中有testScript.groovy,它向容器中添加了一些闭包。我尝试让gradle从脚本生成类,并在代码中创建实例,如下所示:

def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()

我正在硬编码testScript名称。但是会有很多脚本,我应该能够动态地检索它。

运行groovy脚本的推荐方法是使用
GroovyScriptEngine

String[] path = new String[] { "." };
GroovyScriptEngine engine = new GroovyScriptEngine(path);
engine.run("yoursriptname.groovy", new Binding())
注意:
yoursriptname
应该是脚本相对于
path
的路径


如果要传递绑定(参数,然后获得结果),必须使用。

运行groovy脚本的推荐方法是使用
GroovyScriptEngine

String[] path = new String[] { "." };
GroovyScriptEngine engine = new GroovyScriptEngine(path);
engine.run("yoursriptname.groovy", new Binding())
注意:
yoursriptname
应该是脚本相对于
path
的路径


如果要传递绑定(参数,然后获得结果),必须使用。

硬编码是什么意思?您的代码的哪一部分是硬编码的?我更新了问题。哦,我现在明白了,在这种情况下,您必须使用GroovyScriptEngine。硬编码是什么意思?你的代码的哪一部分是硬编码的?我更新了这个问题。哦,我现在明白了,在这种情况下,你必须使用GroovyScriptEngine。这解决了在运行多个脚本时全局存储闭包的问题吗?我想我可以这样做,非常感谢您的回复。这解决了在运行多个脚本时全局存储闭包的问题吗?我想我可以这样做,非常感谢您的回复。