Groovy - 为单个实例重写invokeMethod [英] Groovy - overriding invokeMethod for a single instance

查看:351
本文介绍了Groovy - 为单个实例重写invokeMethod的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个java对象的实例,让我们说一个ArrayList实例,称为myList。

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

我可以这样做:

  myList.metaclass.invokeMethod {name,args  - > 
$ b println用$ {args}调用$ {name}
whatGoesHere.invokeMethod(name,args)

}

注意封闭的第二行 - 我怎样才能调用原始的invokeMethod方法?我是否正确地做了这件事?

解决方案

原始方法可能有一条较短的路线, p>

  def myList = [1,2,3] 

myList.metaClass.invokeMethod {name,args - >
println用$ {args}调用$ {name}
delegate.class.metaClass.getMetaMethod(name,args)?。invoke(delegate,args)
}

myList.sum()


I have an instance of a java object, let's say an instance of ArrayList called myList.

For this particular instance, I want to override the invokeMethod method to (say) log that method was called.

I could do something like this:

myList.metaclass.invokeMethod { name, args -> 

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

}

Notice the 2nd line of the closure - how can I call the original invokeMethod method? Am I going about this correctly?

解决方案

There might be a shorter route to the original method, but this should work:

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()

这篇关于Groovy - 为单个实例重写invokeMethod的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆