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 回答