将闭包从java传递到groovy

将闭包从java传递到groovy,java,groovy,Java,Groovy,我是groovy的新手。我试图将一些dSL格式的业务规则从java类传递给groovy。Java类正在从外部源读取它。 Groovy类实现了使用builder读取此DSL。如何将这些规则传递给groovy方法 这是我的groovy类: def ruleSet=[:]; def displaySet=[:]; def when(String c1) { ['and': { String c2 -> ['then': { String

我是groovy的新手。我试图将一些dSL格式的业务规则从java类传递给groovy。Java类正在从外部源读取它。 Groovy类实现了使用builder读取此DSL。如何将这些规则传递给groovy方法

这是我的groovy类:

 def ruleSet=[:];
    def displaySet=[:];
    def when(String c1) {
        ['and': { String c2 ->
            ['then': { String result ->
                ['display':{String status ->
                 constructRule(c1,c2,result,status)
                }]
        }]
    }]
}

def make(closure){


    when 'a=b' and 'c=d' then 'aaaa' display 'bbbb'
    when "a1=b1" and "c1=d1" then "c1c1c1" display "d1d1d1"
    println ruleSet
    println displaySet
}
测试java类具有以下特性:

Class scriptClass = new GroovyClassLoader().parseClass( new File( "filename.groovy" ) ) ;
        GroovyObject groovyObj = (GroovyObject) scriptClass.newInstance();

        groovyObj.invokeMethod("make", new Object[] {????} );

Groovy闭包实际上是类型为
Groovy.lang.closure
的对象。不清楚您正在使用
make
方法的
closure
参数做什么,因为您在该方法中没有以任何方式使用它

例如,您可以创建一个闭包,通过创建闭包的子类调用类上的方法,如下所示:

MethodClosure methodCall = new MethodClosure(someObject, "methodName");
在Java中,可以这样创建一个可以执行任何操作的闭包:

打印出一条消息或其他任何东西

public class FooClosure extends Closure {
    public FooClosure(Object owner, Object thisObject) {
           super(owner, thisObject);
           parameterTypes = new Class[1];
           parameterTypes[0] = String.class;
           maximumNumberOfParameters = 1;
    }


    public java.lang.Object doCall(String message) {
         System.out.println(message);
         return Closure.DONE;
    }
}

您是否尝试将lambda传递给Groovy以查看发生了什么?我尝试将此dsl从java代码传递给Groovy类,以便可以解析它并将其存储在ruleset和resultSet中。当“a=b”和“c=d”时,“aaaa”显示“bbbb”,当“a1=b1”和“c1=d1”时,“c1c1c1”显示“d1d1d1”