5

Java オブジェクトのインスタンスがあります。たとえば、myList という ArrayList のインスタンスがあるとします。

この特定のインスタンスでは、invokeMethod メソッドをオーバーライドして、メソッドが呼び出されたことを (たとえば) ログに記録したいと考えています。

私はこのようなことができます:

myList.metaclass.invokeMethod { name, args -> 

   println "Called ${name} with ${args}"
   whatGoesHere.invokeMethod(name, args)

}

クロージャの 2 行目に注意してください - 元の invokeMethod メソッドを呼び出すにはどうすればよいですか? 私はこれについて正しく行っていますか?

4

1 に答える 1

6

元の方法へのより短いルートがあるかもしれませんが、これはうまくいくはずです:

def myList = [ 1, 2, 3 ]

myList.metaClass.invokeMethod { name, args -> 
   println "Called ${name} with ${args}"
   delegate.class.metaClass.getMetaMethod( name, args )?.invoke( delegate, args )
}

myList.sum()
于 2012-04-12T14:45:18.330 に答える