groovy闭包

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()

 

相关推荐