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