groovy闭包

24 篇文章 0 订阅
本文详细介绍了Groovy语言中的闭包概念及其应用。通过具体的代码示例,展示了如何使用闭包来实现接口、多线程操作及匿名内部类等场景。此外还介绍了闭包中的特殊变量如it、this、owner和delegate的作用。
摘要由CSDN通过智能技术生成

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值