如何给Groovy闭包参数指定类型

时间:2019-05-19 23:20:56

标签: java groovy functional-programming

我知道闭包具有隐式类型“ 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函数一样。

1 个答案:

答案 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>

希望这会有所帮助。