日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )

發(fā)布時(shí)間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 總結(jié)
  • 一、靜態(tài)閉包變量
    • 1、執(zhí)行普通閉包變量
    • 2、執(zhí)行靜態(tài)閉包變量
  • 二、 在閉包中定義閉包
  • 三、 完整代碼示例

總結(jié)


在閉包中 , 打印 this , owner , delegate , 打印結(jié)果都是創(chuàng)建閉包時(shí)所在的類 ;

  • 如果在類中創(chuàng)建閉包 , 則打印結(jié)果是類 ;
  • 如果在實(shí)例對(duì)象中創(chuàng)建閉包 , 則打印結(jié)果是實(shí)例對(duì)象 ;
  • 如果在閉包 A 中創(chuàng)建 閉包 B , this 是最外層閉包 A 之外的類 , owner , delegate 是上一層閉包 B ;




一、靜態(tài)閉包變量




1、執(zhí)行普通閉包變量


在類中定義閉包變量 , 在閉包中打印 this、owner、delegate 值 ,

class Test2 {def closure = {println "this : " + thisprintln "owner : " + ownerprintln "delegate : " + delegate} }

執(zhí)行上述 Test2 類中的閉包 ,

new Test2().closure()

打印結(jié)果如下 : 打印的值都是 Test2 實(shí)例對(duì)象 ;

this : Test2@5082d622 owner : Test2@5082d622 delegate : Test2@5082d622

2、執(zhí)行靜態(tài)閉包變量


如果將閉包聲明為靜態(tài)變量 ,

class Test2 {def static closure = {println "this : " + thisprintln "owner : " + ownerprintln "delegate : " + delegate} }

直接使用閉包所在類直接調(diào)用閉包 , 不再使用閉包所在類對(duì)象調(diào)用閉包 ;

Test2.closure()

執(zhí)行結(jié)果為 : 打印的值都是 Test2 類 ;

this : class Test2 owner : class Test2 delegate : class Test2

還是上述靜態(tài)閉包變量 , 使用 Test2 實(shí)例對(duì)象調(diào)用 ,

new Test2().closure()

打印的結(jié)果是創(chuàng)建閉包時(shí)所在的類 ;

this : class Test2 owner : class Test2 delegate : class Test2



二、 在閉包中定義閉包



在 Test2 類中定義 閉包變量 closure2 , 在 closure2 閉包中定義 closure3 閉包 ,

class Test2 {def closure2 = {def closure3 = {println "this : " + thisprintln "owner : " + ownerprintln "delegate : " + delegate}closure3()} }

打印結(jié)果如下 :

this : Test2@291a7e3c owner : Test2$_closure1@4ae9cfc1 delegate : Test2$_closure1@4ae9cfc1

this 值為 外部的 Test2 實(shí)例對(duì)象 ;

owner 和 delegate 是 Test2 中定義的 closure2 閉包 ;


創(chuàng)建 closure2 閉包時(shí) , this、owner、delegate 都是 Test2 實(shí)例對(duì)象 ;

但是創(chuàng)建 closure3 閉包時(shí) , this 的值還是設(shè)置 closure2 的 this 值 , owner、delegate 值設(shè)置成 closure2 閉包 ;

// 創(chuàng)建內(nèi)層閉包時(shí) , 傳入的 this 是 外層閉包的 this.getThisObject() // 因此 this 值仍是 Test2 實(shí)例對(duì)象 // owner、delegate 變?yōu)橥鈱拥?Closure 閉包 ; Object closure3 = new _closure2(this, this.getThisObject());

分析生成的字節(jié)碼文件 :

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //import groovy.lang.Closure; import groovy.lang.GroovyObject; import groovy.lang.MetaClass; import groovy.transform.Generated; import groovy.transform.Internal; import org.codehaus.groovy.runtime.GeneratedClosure; import org.codehaus.groovy.runtime.callsite.CallSite;public class Test2 implements GroovyObject {private Object closure2;@Generatedpublic Test2() {CallSite[] var1 = $getCallSiteArray();super();// 創(chuàng)建外層閉包 Test2._closure1 var2 = new Test2._closure1(this, this);this.closure2 = var2;MetaClass var3 = this.$getStaticMetaClass();this.metaClass = var3;}@Generated@Internalpublic MetaClass getMetaClass() {MetaClass var10000 = this.metaClass;if (var10000 != null) {return var10000;} else {this.metaClass = this.$getStaticMetaClass();return this.metaClass;}}@Generated@Internalpublic void setMetaClass(MetaClass var1) {this.metaClass = var1;}@Generatedpublic Object getClosure2() {return this.closure2;}@Generatedpublic void setClosure2(Object var1) {this.closure2 = var1;}// 這是外層的 Closure 閉包public final class _closure1 extends Closure implements GeneratedClosure {public _closure1(Object _outerInstance, Object _thisObject) {CallSite[] var3 = $getCallSiteArray();super(_outerInstance, _thisObject);}public Object doCall(Object it) {CallSite[] var2 = $getCallSiteArray();// 這是內(nèi)層的 Closure 閉包final class _closure2 extends Closure implements GeneratedClosure {public _closure2(Object _outerInstance, Object _thisObject) {CallSite[] var3 = $getCallSiteArray();super(_outerInstance, _thisObject);}public Object doCall(Object it) {CallSite[] var2 = $getCallSiteArray();var2[0].callCurrent(this, var2[1].call("this : ", this.getThisObject()));var2[2].callCurrent(this, var2[3].call("owner : ", var2[4].callGroovyObjectGetProperty(this)));return var2[5].callCurrent(this, var2[6].call("delegate : ", var2[7].callGroovyObjectGetProperty(this)));}@Generatedpublic Object doCall() {CallSite[] var1 = $getCallSiteArray();return this.doCall((Object)null);}}// 創(chuàng)建內(nèi)層閉包時(shí) , 傳入的 this 是 外層閉包的 this.getThisObject() // 因此 this 值仍是 Test2 實(shí)例對(duì)象 // owner、delegate 變?yōu)橥鈱拥?Closure 閉包 ; Object closure3 = new _closure2(this, this.getThisObject());return var2[0].call(closure3);}@Generatedpublic Object doCall() {CallSite[] var1 = $getCallSiteArray();return this.doCall((Object)null);}} }



三、 完整代碼示例



完整代碼示例 :

class Test2 {// 定義靜態(tài)閉包// 即可以通過(guò)類執(zhí)行// 又可以通過(guò)對(duì)象執(zhí)行def static closure = {println "this : " + thisprintln "owner : " + ownerprintln "delegate : " + delegate}// 閉包中定義閉包def closure2 = {def closure3 = {println "this : " + thisprintln "owner : " + ownerprintln "delegate : " + delegate}closure3()} }println "通過(guò)類執(zhí)行閉包 :"Test2.closure()println "\n通過(guò)對(duì)象執(zhí)行閉包 :"new Test2().closure()println "\n閉包中定義閉包并執(zhí)行 : "new Test2().closure2()

執(zhí)行結(jié)果 :

通過(guò)類執(zhí)行閉包 : this : class Test2 owner : class Test2 delegate : class Test2通過(guò)對(duì)象執(zhí)行閉包 : this : class Test2 owner : class Test2 delegate : class Test2閉包中定義閉包并執(zhí)行 : this : Test2@1f010bf0 owner : Test2$_closure1@40db2a24 delegate : Test2$_closure1@40db2a24

總結(jié)

以上是生活随笔為你收集整理的【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 98视频在线| 成人欧美一区二区三区黑人孕妇 | 亚洲精品一区二区三区在线观看 | 狠狠干天天色 | 看免费毛片| 天天操夜夜操 | 国产精品乱码一区二三区小蝌蚪 | 性欧美高清 | 强迫凌虐淫辱の牝奴在线观看 | 后进极品美女圆润翘臀 | 国产精品一区二区在线 | 欧美日韩国产伦理 | 黄色wwww| 久久国内精品视频 | 91中文在线 | 这里只有久久精品 | 亚洲人成免费 | 性欧美极品 | 日韩欧美一区在线 | 美女黄页网站 | 亚洲欧洲精品一区 | 深夜福利电影 | 国产精品乱码一区二区视频 | 日本黄色免费 | 青草热视频 | 亚洲九九夜夜 | 人人爽人人干 | 精品人妻无码一区二区性色 | 久久国产色av| 久久人妻免费视频 | 中文字幕乱码中文乱码777 | 中文高清av | 午夜精品久久久久久久蜜桃 | 欧美综合激情 | 深夜视频在线免费 | 人人爱人人澡 | 欧美日韩123| 欧美日韩不卡在线 | 色综合久久久久久 | 欧美成人资源 | 免费吃奶摸下激烈视频 | 中文字幕在线观看1 | 天天网综合 | 日韩精品极品视频在线观看免费 | 成人免费毛片足控 | 中文资源在线播放 | 一级福利视频 | 日日cao| 少妇被狂c下部羞羞漫画 | 国产无遮挡又黄又爽免费网站 | 91成人一区二区三区 | 国产又黄又大又粗视频 | 久久成人av | 亚洲av无码国产精品久久不卡 | 一级做a爱片 | 麻豆视频精品 | 一区二区在线免费观看 | 午夜av福利 | 欧美午夜在线观看 | 女人18毛片毛片毛片毛片区二 | 在线观看国产欧美 | a级黄色在线观看 | 秋霞影院午夜老牛影院 | 黄色茄子视频 | 日韩三级精品 | 四虎在线精品 | 秋霞视频一区二区 | 亚洲瘦老头同性xxxxx | 日日碰狠狠添天天爽 | 国产不卡视频在线 | 久久久人人人 | av爱爱| 深夜福利麻豆 | 五月婷婷六月合 | 男人的亚洲天堂 | 久久久久在线视频 | www.五月激情 | 香蕉久久精品 | 嫩操影院| 欧美国产一区二区 | 高清视频在线免费观看 | 国产白嫩美女无套久久 | 内射后入在线观看一区 | 91成人免费电影 | 波多野结衣乳巨码无在线观看 | 欧美一区二区激情 | 国产视频一区二区三区在线观看 | 动漫同人高h啪啪爽文 | 国产精品无码午夜福利 | 浴室里强摁做开腿呻吟男男 | 大地资源二中文在线影视免费观看 | 亚洲福利电影 | 在线国产精品一区 | 丝袜老师办公室里做好紧好爽 | 午夜做爰xxxⅹ性高湖视频美国 | 成人网页 | 香蕉视频91 | 亚洲乱码一区二区三区 | 欧美成人三级精品 |