繁体   English   中英

如何为 groovy 闭包参数指定类型

[英]How to give groovy closure parameter a type

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

您可以使用@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的参数类型等于此方法的第一个参数

GitHub 上的完整代码

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM