我知道闭包具有隐式类型“ it”,以便我们可以定义函数
def int foo(int num, Closure closure){
def sum = num
sum+=closure.call(1)
}
然后我将此函数称为
def total = foo(1,{it+1})
print total
//prints 2
我的问题是我如何强制闭包采用int类型的显式参数。就像我们如何在Java中定义lambda函数一样。
答案 0 :(得分:4)
您可以使用@ClosureParam
用其参数说明注释Closure
参数声明。在您的特定情况下:
import groovy.transform.stc.ClosureParams
import groovy.transform.stc.FirstParam
int foo(int num, @ClosureParams(FirstParam) Closure closure) {
def sum = num
sum += closure.call(5)
}
其中FirstParam
是提示,它表示closure
的参数的类型等于此方法的第一个参数。< / p>
希望这会有所帮助。