groovy789's blog

技術系備忘録φ(..)メモメモ

GroovyのOwner、this、delegateについて

[groovy]いまいち使い方がわからなかったので、テストコードで試してみた。

/**
 * クロージャの実行順序確認
 */
class Sample1 {        
    static main(args) {
        // クラスBのインスタンス作成
        def b = new B()
        // クラスAのクロージャを設定
        b.c = new A().c
        def bb = b.c()
        // デリゲート設定
        bb.delegate = b
        // クロージャ実行
        bb()
    }
    
    static class A {
        // クロージャを返すクロージャ
        def c = {
            def hello = {
                println "Hello A1'"
            }
            return {
                println owner
                println "this    =$this"
                println "delegate=$delegate"
                hello()
            }
        }
        
       def hello() {
           println "Hello A1"
       } 
    }
    
    static class B {
      // クロージャ
       def c 
        
        def hello() {
            println "Hello B1"
        }
    }
}


実行すると、「"Hello A1'"」が表示される。

メソッドの探索順はowner⇒this⇒delegateの順

すっきり~