Groovy Trait返回实现类型适用于方法链接

时间:2016-08-20 18:04:58

标签: groovy traits

是否可以使用方法链将特征方法与实现类的方法结合使用?这要求trait返回实现类的特定类型,默认情况下“this”变量不是该类型。

类似的东西:

def withFilter(String filter){
    this.filter = filter
    return (super.getClass())this
}

根据下面帖子的最佳答案,使用Scala Traits看起来很容易实现,但我并不完全理解语法。看起来它使用了一个闭包来定义它的返回类型,但在Groovy中它是一样的吗?

Best practice to implement Scala trait which supports method chaining

1 个答案:

答案 0 :(得分:3)

您可以使用泛型方法。

这是一个例子

trait MyTrait<T extends MyTrait<T>> {
    def filter

    T withFilter(String filter) {
        this.filter = filter
        return (T) this
    }
}

class MyClz implements MyTrait<MyClz> {
    def clzMethod() {}
}

def clz = new MyClz()
        .withFilter("hello")
        .withFilter("another")
        .clzMethod()