闭包中有三个属性,this,owner,delegete。可在闭包中直接获取。
如果是内部类,就是只想内部类名。
如果当前闭包是在闭包中定义的,那么owner的值就是当前闭包(比如closure2是在closure1中定义的,那么closure2的owner就是closure2);除了上面那种情况剩下的就和this一样了
上面三个熟悉中功能最强的用的最多的也就是delegete了,比如利用android方法传入的闭包设置必要的属性
顾名思义属性委托,那么委托给谁?把什么委托?
一句话:把属性委托给闭包
下面来看一段代码:
可用在线代码平台直接运行: 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
Person{name='Not is BeiYang', age=11', sex=1}
使用方法是在调用delegete之前调用闭包的方法:main.cc.setResolveStrategy(Closure.OWNER_FIRST)
效果读者自行尝试吧~~~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。