【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
文章目錄
- 總結(jié)
- 一、接口中定義 call() 方法
- 二、類中定義 call() 方法
- 三、完整代碼示例
總結(jié)
在 實例對象后使用 " () " 括號符號 , 表示調(diào)用該實例對象的 " call() " 方法 ;
一、接口中定義 call() 方法
定義 Action 接口 , 在該接口中 , 創(chuàng)建 void call() 抽象方法 ;
/*** 創(chuàng)建接口* 接口中定義 call 方法* 調(diào)用上述 接收 閉包作為參數(shù)的 fun 函數(shù)時* 傳入該 Action 匿名內(nèi)部類*/ interface Action {void call() }創(chuàng)建上述 Action 方法的匿名內(nèi)部類 , 并 使用 () 執(zhí)行上述匿名內(nèi)部類對象 , 會 自動調(diào)用 Action 匿名內(nèi)部類的 call 方法 ;
// 在 Action 對象后使用 () 執(zhí)行方法相當于調(diào)用 call 方法 new Action(){@Overridevoid call() {println "Closure 3"} }()執(zhí)行上述代碼 , 會打印
Closure 3內(nèi)容 ;
同時上述匿名內(nèi)部類 , 可以當做閉包 , 傳遞給
/*** 定義一個方法 , 接收閉包作為參數(shù) , 在方法中執(zhí)行閉包內(nèi)容* @param closure* @return*/ def fun(closure) {closure() }函數(shù) ; 向 fun 函數(shù)中 , 傳入 Action 匿名內(nèi)部類 , 此時執(zhí)行該函數(shù)時 , 執(zhí)行閉包內(nèi)容 , 會自動調(diào)用 Action 匿名內(nèi)部類的 call 方法 ;
// 向 fun 函數(shù)中 , 傳入 Action 匿名內(nèi)部類 // 此時執(zhí)行該函數(shù)時 , 執(zhí)行閉包內(nèi)容 , 會自動調(diào)用 Action 匿名內(nèi)部類的 call 方法 fun (new Action(){@Overridevoid call() {println "Closure 3"} })上述 fun 函數(shù)的執(zhí)行結(jié)果 :
Closure 4二、類中定義 call() 方法
在普通的 Groovy 類中 , 定義 call() 方法 ;
// 定義一個有 call 方法的類 class Action2 {def call() {println "Closure 5"} }在該類實例對象后 使用 () , 會自動執(zhí)行該類的 call 方法 ;
// 在該類實例對象后使用 () , 會自動執(zhí)行該類的 call 方法 new Action2()()執(zhí)行結(jié)果為 :
Closure 5三、完整代碼示例
完整代碼示例 :
/*** 定義一個方法 , 接收閉包作為參數(shù) , 在方法中執(zhí)行閉包內(nèi)容* @param closure* @return*/ def fun(closure) {closure() }/*** 創(chuàng)建接口* 接口中定義 call 方法* 調(diào)用上述 接收 閉包作為參數(shù)的 fun 函數(shù)時* 傳入該 Action 匿名內(nèi)部類*/ interface Action {void call() }// 將 閉包 當做 參數(shù) 傳遞到函數(shù)中 fun ({println "Closure 1" })// 閉包是函數(shù)的最后一個參數(shù) , 可以 省略括號 , 將閉包寫在函數(shù)后面 fun {println "Closure 2" }// 在 Action 對象后使用 () 執(zhí)行方法相當于調(diào)用 call 方法 new Action(){@Overridevoid call() {println "Closure 3"} }()// 向 fun 函數(shù)中 , 傳入 Action 匿名內(nèi)部類 // 此時執(zhí)行該函數(shù)時 , 執(zhí)行閉包內(nèi)容 , 會自動調(diào)用 Action 匿名內(nèi)部類的 call 方法 fun (new Action(){@Overridevoid call() {println "Closure 4"} })// 定義一個有 call 方法的類 class Action2 {def call() {println "Closure 5"} }// 在該類實例對象后使用 () , 會自動執(zhí)行該類的 call 方法 new Action2()()執(zhí)行結(jié)果 :
Closure 1 Closure 2 Closure 3 Closure 4 Closure 5總結(jié)
以上是生活随笔為你收集整理的【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】闭包 Closure (
- 下一篇: 【Groovy】闭包 Closure (