Groovy语言中闭包(closure)是一个非常重要的概念,而且深入的理解了闭包对充分用好Groovy有很大帮助。对闭包比较书面的一种解释“闭包是可以用作函数参数和方法参数的代码块”。其实Groovy的闭包更象是一个“代码块”或者方法指针,代码在某处被定义然后在其后的调用处执行
Groovy闭包中几个隐含变量
it:默认的参数名,调用是如果没有传参数,it为null
this : 跟Java一样,是定义闭包所在类的一个引用,不管有多少层闭包嵌套,this指向的都是最上层的类。
owner : 封闭闭包的对象(如果只有一层闭包就是this,如果有多层闭包嵌套就是含有此闭包的上层闭包)
delegate :缺省值是owner,但是可以改变.
1、闭包实现接口,或用于匿名内部类
//列表排序 def list = [new Person(name:"tom",age:20),new Person(name:"Alice",age:23), new Person(name:"Wallam",age:31)] println list def comparatorImpl = { node1,node2-> node1.age-node2.age } as Comparator Collections.sort(list,comparatorImpl)
//接口有多个方法,map映射实现 interface MultiFuncTest { def test1() def test2(str) } def impl = [test1:{println 'test'}, test2:{str -> println str}] as MultiFuncTest impl.test1() impl.test2('ok')
//多线程卖票实现Runnable接口 //1.避免继承的局限,一个类可以实现多个接口。 //2.适合于资源的共享 def go = { num -> for(a in 1..40){ if(num>0){ println "sold ticket:" + num-- }else{ println "sold out:" + a } } } as Runnable ticket = go(10) new Thread(ticket).start() new Thread(ticket).start()