gpt4 book ai didi

java - 将闭包从 java 传递到 groovy

转载 作者:行者123 更新时间:2023-12-03 02:43:10 26 4
gpt4 key购买 nike

我对 Groovy 还很陌生。我正在尝试将一些 dSL 格式的业务规则从 java 类传递到 groovy。 Java 类正在从外部源读取它。Groovy 类具有使用构建器读取此 DSL 的实现。如何将这些规则传递给 groovy 方法?

这是我的绝妙类(class):

 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 来创建一个调用类上方法的闭包。 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;
}
}

关于java - 将闭包从 java 传递到 groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com