Groovy 在调用之前更改和添加方法的参数
我想通过截取对某些方法的调用来重现默认参数的行为。当调用不带参数的方法display时,以下代码尝试提供默认参数:Groovy 在调用之前更改和添加方法的参数,groovy,metaprogramming,Groovy,Metaprogramming,我想通过截取对某些方法的调用来重现默认参数的行为。当调用不带参数的方法display时,以下代码尝试提供默认参数: class Thing { void display(String text) { println(text) } def invokeMethod(String name, args) { if(name == "display" && args.length == 0) {
class Thing
{
void display(String text)
{
println(text)
}
def invokeMethod(String name, args)
{
if(name == "display" && args.length == 0)
{
metaClass.getMetaMethod(name, ["some text"]).
invoke(this, "some text")
}
else
{
metaClass.getMetaMethod(name, args).
invoke(this, args)
}
}
}
Thing thing = new Thing()
thing.display("stuff") //prints "stuff"
thing.display() //nothing happens
然而,这是行不通的;没有参数时,不会打印任何内容
这个例子不是很有用,但我想让它发挥作用;我的下一个目标确实是创建方法,这些方法的参数可以以它们的名称给出。例如:
Add1And2()// should return 3
Add4And9()// should return 13
拦截对这些不存在的方法的调用,并调用一个现有的方法,该方法将使用不存在的方法名称中使用的数字进行加法,这将使…成为可能。类
事情
应实现如下操作,以使调用方法
工作:
class Thing implements GroovyInterceptable {
void display(String text) {
println(text)
}
def invokeMethod(String name, args) {
if(name == "display" && args.length == 0) {
metaClass.getMetaMethod(name).invoke(this, "some text")
} else {
metaClass.getMetaMethod(name, args).invoke(this, args)
}
}
}
Thing thing = new Thing()
thing.display("stuff") //prints "stuff"
thing.display()