类 groovy.lang.Closure 是一个普通的 java 类,尽管它有非常强大的功能和额外的语言支 持,它有各种各样不同功能的调用方法,我们将看看最重要的一些方法——即使你通常仅仅声明和调用闭包,在需要的时候知道一些额外的功能是好的。
参数的数量
一个有用的简单的例子是 map 的 each 方法作用在闭包上的参数的数量,我们在 4.3.2节讨论过,这个方法传递一个 Map.Entry 对象的参数或者 key 和 value 分离的参数给闭包,依赖闭包是接受一个参数还是两个参数,通过闭包的 getParameterTypes 方法你能了解到你期望的参数数量信息(类型,如果声明了类型):
def caller (Closure closure){
closure.getParameterTypes().size()
}
assert caller { one -> } == 1 assert caller { one, two -> } == 2
在 Map.each 例子中,这允许支持不同参数风格的闭包,以适应调用者的需要。