Groovy如何将某些方法委托给其他类方法?

时间:2014-02-14 12:04:41

标签: java groovy

我很开心,我希望我能这样做。

假设我有一个名为App.groovy的班级。

class App
{
}

我还有其他名为DelegateClass的类,它有两种方法:

edit
create

在其他课程中,我需要这样做:

    //class Test
    def app = new App()
    app.editDetails()
    app.createDetails()
    app.editOtherDetails()

我希望所有以edit*开头的方法都转到DelegateClass edit方法,而create*方法则相同。

我该怎么做?

出于好奇,在java中可以做同样的事情吗?

1 个答案:

答案 0 :(得分:3)

所以,假设你有这个委托类:

class DelegateClass {
    String create( args ) {
        "create ${args.join(',')}"
    }

    String edit( args ) {
        "edit ${args.join(',')}"
    }
}

然后您可以在App类中使用methodMissing

class App {
    DelegateClass delegate = new DelegateClass()

    def methodMissing( String name, args ) {
        if( name.startsWith( 'create' ) ) {
            delegate.create( args )
        }
        else if( name.startsWith( 'edit' ) ) {
            delegate.edit( args )
        }
    }
}

所以以下所有工作:

def app = new App()
assert app.editDetails() == 'edit '
assert app.editDetails( 'foo' ) == 'edit foo'
assert app.editDetails( 'foo', 'bar' ) == 'edit foo,bar'
assert app.createDetails( 'tim' ) == 'create tim'
assert app.createOtherDetails() == 'create '

使用java,没有methodMissing这样的东西,所以你需要发送描述方法的字符串来调用集中处理程序方法,然后调用你想要的方法。