是否可以使用方法链将特征方法与实现类的方法结合使用?这要求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
答案 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()