Gradle语法之再解闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle语法之再解闭包相关的知识,希望对你有一定的参考价值。

作用

属性

闭包中有三个属性,this,owner,delegete。可在闭包中直接获取。

this:代表定义当前闭包的类。

owner:代表定义当前闭包的类或者闭包。

delegete:默认是和owner一致。除非自定义delegete

自定义delegete

顾名思义属性委托,那么委托给谁?把什么委托?

一句话:把属性委托给闭包

下面来看一段代码:

可用在线代码平台直接运行: https://tool.lu/coderunner/

#### 作用

**可将属性和闭包绑定,这样闭包中就可以直接使用委托属性的字段和方法了;还有一种作用,闭包中设置的值也会同样设置给委托属性,因此在闭包中可以修改赋值。**

**第二种作用就是我们常见的通过android闭包设置属性**

android


#### 冲突

问题:\\
**闭包内如果有和属性相同的字段或者相同的方法的时候,这时候是怎么处理的?**

###### 相同属性

**因为是将属性委托给了闭包,因此拥有相同字段的时候就相当于对这个字段重新赋值**

###### 相同方法

**默认是使用delegete的,但是也可以通过设置delegete的策略来指定具体使用ower还是delegete。**

修改:

>这里只看特殊情况,当返回值不一致的时候也是会使用owner的方法;这里得提到方法签名,Groovy和Java都是基于JVM,但是对方法签名这块看完这个修改后会发现两个语言的方法签名不一样,可以去《深入理解JAVA虚拟机中》查找关于方法签名的知识。


>在上面的代码的基础上做扩展得到的结论。一个注意点是Groovy中没有基本类型都是包装类型,需要返回Integer 。

打印:

delegete Person is Not is BeiYang age = 11 111 111 Personname=Not is BeiYang, age=11, sex=1


###### 委托策略

-   Closure.OWNER_FIRST是默认策略。优先在owner寻找,owner没有再delegate
-   Closure.DELEGATE_FIRST:优先在delegate寻找,delegate没有再owner
-   Closure.OWNER_ONLY:只在owner中寻找
-   Closure.DELEGATE_ONLY:只在delegate中寻找
-   Closure.TO_SELF:暂时没有用到,哎不知道啥意思

>使用方法是在调用delegete之前调用闭包的方法:main.cc.setResolveStrategy(Closure.OWNER_FIRST)

效果读者自行尝试吧~~~

以上是关于Gradle语法之再解闭包的主要内容,如果未能解决你的问题,请参考以下文章

Gradle学习之闭包

Groovy基础语法整理

Groovy基础语法整理

Groovy基础语法整理

Groovy基础语法整理

android gradle 怎么用