1.Closures的语法
格式语法:{ [closureParameters -> ] statements }
{ name -> println name }
2.Closures对象和调用
Closures是一个对象(groovy.lang.Closure),是一个匿名代码块,类似于javascript的箭头函数,例子如下
def demo = {
it -> println it
}
def 后紧跟着名称,这名称也是方法名,类似定义一个变量。
Closures调用方式如下
demo(xxx);
demo.call(xxx);
xxx是需要传的参数
3.Closures的参数
Closures的参数分为3种,分别为正常参数,隐式参数和可变参数
1)正常参数
有三个特性,1.类型可选,2.参数名,3.默认值(可选)
例子如下:
def numAdd = { // 类型,默认值
int a, int b=2 -> a+b
}
def numAdd2 = { // 无类型,默认值
a,b=2 -> a+b
}
def numAdd2 = { // 无类型
a,b -> a+b
}
def numAdd3 = { // 有类型
int a, int b -> a+b
}
2)隐式参数
隐式参数:it,这个it指代是传入的参数
代码如下:
def greeting = { it -> "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!'
// it代表传入的参数
3)可变参数
可变参数与java的可变参数一样,格式如下:type... name
例子如下
def concat1 = { String... args -> args.join('') }
assert concat1('abc','def') == 'abcdef'
def concat2 = { String[] args -> args.join('') }
assert concat2('abc', 'def') == 'abcdef'
4.委托策略
1)Closure的this指代的是什么?
在官网文档中有这样一句话
this
corresponds to the enclosing class where the closure is defined
大概意思,this对应的定义closure的闭包类(最近的)而且只能是类不能是closure,这个不论是内部类还是外部类;