对 Groovy 闭包(this、owner、delegate)的理解

本文详细介绍了Groovy中闭包的特性,包括this、owner和delegate的概念。Groovy的闭包查找顺序不同于其他语言,首先尝试在this、owner对象上查找,其次才是在delegate上。delegate允许闭包访问不属于其作用域的变量,例如在Gradle构建脚本中,通过设置闭包的delegate为配置对象,即使闭包不在配置对象内部定义,也能修改配置对象的属性,这是delegate的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

this 指向定义闭包的对象或静态类

owner 跟 this 一样,如果闭包定义在另一个闭包内部,owner 就指向此闭包

delegate 跟 owner 一样,但可以修改


别的语言的闭包,比如 Java,在闭包里访问变量或者调用方法,寻找这些变量和方法的顺序是:

1、闭包作用域

2、方法作用域 / 外层闭包作用域

3、类作用域

Groovy 的顺序是:

1、this

2、owner

3、delegate

在 this、owner 对象上寻找对应 Java 的 1-2-3 作用域

delegate 的意义

它的主要作用是让你在定义闭包时访问一些你不拥有的变量,例如:



闭包

这个花括号就是一个闭包,在这个闭包里面访问了 minSdkVersion、targetSdkVersion、versionCode 三个变量。闭包执行时会先在 this、owner 两个对象上面寻找这三个变量,因为你没有定义这三个变量,所以最后就到 delegate 对象上去找。

defaultConfig 是 android gradle 插件定义的一个方法,你把闭包传给它,它设置闭包的 delegate 为一个配置对象,然后执行闭包。闭包执行时在 delegate (也就是这个配置对象)上找到这三个变量并修改它们。

这个闭包虽然不是在配置对象内部定义,但通过设置 delegate,它还是能修改配置对象,这就是 delegate 的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值