Groovy 在调用之前更改和添加方法的参数

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

我想通过截取对某些方法的调用来重现默认参数的行为。当调用不带参数的方法display时,以下代码尝试提供默认参数:

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