是否有可能有一个列表并将其用作闭包签名的参数,而不是几个变量?原因是我必须从
java代码调用一个闭包,而
java代码不知道groovy闭包需要什么变量.
用一个例子可以更好地服务.
假设我有一个’闭包存储库’,每个闭包可能有不同的签名.例如:
closures = [ closureA: { int a,String b -> a.times { System.err.println(b); } },closureB: { int a,int b,String c -> (a+b).times { System.err.println(c); } } ]
然后我有一个方法,我正在暴露于我的java代码来调用这些闭包:
def tryClosureExpansion(String whichClosure,Object ... args) { def c = closures[whichClosure] c.call(args) // DOESNT COMPILE ! }
// these calls will happen from Java,not from Groovy tryClosureExpansion("closureA",1,"Hello"); tryClosureExpansion("closureB",5,"Hello more");
请参见上面未编译的行.我觉得groovy是’groovy’足以处理这样的事情.任何可能会飞的替代品?
解决方法
请问:
c.call( *args )
工作?不是在计算机上测试它