java - Groovy 如何将某些方法委托(delegate)给其他类方法?

标签 java groovy

我对 groovy 很陌生,我希望我愿意这样做。

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

class App
{
}

我有另一个名为 DelegateClass 的类,它有两个方法:

edit
create

在其他类(class)中,我需要这样做:

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

我希望所有以 edit* 开头的方法都转到 DelegateClass edit 方法,对于 create* 也是如此方法。

我怎样才能做到这一点?

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

最佳答案

所以,假设您有这个委托(delegate)类:

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之类的东西,因此您需要发送描述要调用的方法的字符串到集中处理程序方法,并让其调用您想要的方法。

关于java - Groovy 如何将某些方法委托(delegate)给其他类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778947/

相关文章:

java - 作业帮助、抽象/接口(interface)类

java - 安卓/Java : Inexplicably enters catch block but skips line

java - 从 Android : Java or Python (SL4A) 开始

inheritance - 从扩展类调用时,groovy 中的闭包不能使用私有(private)字段

Eclipse Gradle 插件无法在全新 Luna 安装时检索 Gradle 发行版

java - 如何创建具有动态行的 csv 文件

java - 不可变对象(immutable对象)的所有属性都必须是最终的吗?

java - 如何使用特定注释将自定义序列化器设置为任意 API 端点(spring 应用程序)?

grails - 无法使用Groovy访问参数图

groovy - 如何使用groovy脚本创建odi映射场景