Roy*_*ove 4 groovy metaprogramming
我有一个java对象的实例,比方说一个名为myList的ArrayList实例.
对于这个特定的实例,我想重写invokeMethod方法,以便(比方说)调用该方法.
我可以这样做:
myList.metaclass.invokeMethod { name, args ->
println "Called ${name} with ${args}"
whatGoesHere.invokeMethod(name, args)
}
Run Code Online (Sandbox Code Playgroud)
注意闭包的第二行 - 如何调用原始的invokeMethod方法?我正确地谈到这个吗?
原始方法的路径可能较短,但这应该有效:
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()
Run Code Online (Sandbox Code Playgroud)