简单点好 2013-09-04
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()