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

Changing and adding arguments of method before invocation

我想通过拦截对某些方法的调用来重现默认参数的行为。当 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 应该如下实施 GroovyInterceptable 以使 invokeMethod 工作:

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