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

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 的意义。

你可能感兴趣的:(对 Groovy 闭包(this、owner、delegate)的理解)