5

我有一个 java 对象的实例,比方说一个名为 myList 的 ArrayList 实例。

对于这个特定的实例,我想重写 invokeMethod 方法以(比如说)记录该方法被调用。

我可以做这样的事情:

myList.metaclass.invokeMethod { name, args -> 

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

}

注意闭包的第二行——我如何调用原始的 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 回答