[英]pass closure from java to groovy
我对groovy很陌生。 我正在尝试将dSL格式的一些业务规则从java类传递到groovy。 Java类正在从外部来源读取它。 Groovy类具有使用生成器读取此DSL的实现。 如何将这些规则传递给常规方法?
这是我的时髦课:
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
参数做什么,因为您没有在该方法中以任何方式使用它。
例如,您可以通过创建Closure的MethodClosure子类来创建一个在类上调用方法的闭包,如下所示:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.