2

質問

MyClassメソッドを持つクラスがありmyMethod()ます。たとえば、が呼び出されるprintln "hello"前に毎回実行されるコードを追加するにはどうすればよいですか?myMethod()

メソッド置換の例

メソッド全体をこのように置き換えることができることを私は知っています。

MyClass.metaClass.myMethod = { -> println "myMethod() has been replaced..." }

ただし、メソッド全体を置き換えたくはありません。メソッドの前後にコードを追加したいだけです。

4

1 に答える 1

4

あなたはこの種のことをすることができます:

class MyClass {
  String name

  String expand() {
    "expanded $name"
  }
}

// Cache the old expand method
def oldExpand = MyClass.metaClass.getMetaMethod( 'expand', null )

// Create a new one
MyClass.metaClass.expand = { -> 
  // Do something
  println "Pre stuff"
  try {
    // then invoke and return the original method
    oldExpand.invoke( delegate )
  }
  finally {
    // finally doing something else
    println "Post stuff"
  }
}

def a = new MyClass( name:'tim' )

println "received: " + a.expand()
于 2013-02-18T12:35:05.557 に答える