【Groovy】闭包 Closure ( 闭包的 delegate 代理策略 | OWNER_FIRST | DELEGATE_FIRST | OWNER_ONLY | DELEGATE_ONLY )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】闭包 Closure ( 闭包的 delegate 代理策略 | OWNER_FIRST | DELEGATE_FIRST | OWNER_ONLY | DELEGATE_ONLY )
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、閉包的代理策略引入
- 二、閉包的四種代理策略
一、閉包的代理策略引入
分別在 Groovy 腳本 和 Test 類中定義 fun 方法 , 打印不同的內(nèi)容 ;
在閉包 Closure 中分別調(diào)用上述兩個(gè)方法 ,
代碼示例 :
// I. 閉包中執(zhí)行 Groovy 腳本中的方法def fun() {println "fun" }def closure = {fun() }closure()// II. 閉包中執(zhí)行 Test 類中的方法class Test {def fun() {println "fun2"} }// 閉包中不能直接調(diào)用 Test 對(duì)象中的方法 // 此時(shí)可以通過(guò)改變閉包代理進(jìn)行調(diào)用 def closure2 = {fun() }// 設(shè)置閉包的代理 closure2.delegate = new Test() // 執(zhí)行閉包 closure2()上述代碼執(zhí)行結(jié)果 :
執(zhí)行上述代碼后 , 兩個(gè)閉包都執(zhí)行的是 Groovy 腳本中的 fun 方法 ;
即使 closure2 閉包設(shè)置的是 Test 實(shí)例對(duì)象作為代理 , 其仍然執(zhí)行的是 Groovy 腳本中的 fun 方法 ;
// 設(shè)置閉包的代理 closure2.delegate = new Test()這是因?yàn)?Closure 閉包的 代理策略問(wèn)題導(dǎo)致的 ;
在 Closure 閉包中 , resolveStrategy 成員配置的是該閉包的代理策略 , 默認(rèn)的代理策略 OWNER_FIRST , 也就是優(yōu)先從 owner 中查找方法 ; 此時(shí)即使在 delegate 中有 fun 方法 , 也會(huì)被 owner 中的 fun 方法覆蓋 ;
private int resolveStrategy = OWNER_FIRST;二、閉包的四種代理策略
閉包的四種代理策略 :
- OWNER_FIRST : 所有者中的方法優(yōu)先 ;
- DELEGATE_FIRST : 代理優(yōu)先策略 , 代理中的方法優(yōu)先 ;
- OWNER_ONLY : 只執(zhí)行所有者中的方法 ;
- DELEGATE_ONLY : 只執(zhí)行代理中的方法 ;
- TO_SELF : 只在自身查找 ;
總結(jié)
以上是生活随笔為你收集整理的【Groovy】闭包 Closure ( 闭包的 delegate 代理策略 | OWNER_FIRST | DELEGATE_FIRST | OWNER_ONLY | DELEGATE_ONLY )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Groovy】闭包 Closure (
- 下一篇: 【Groovy】Groovy 方法调用