我有一些特征“Foo”有一些方法。我想把这个特性混合到任何一个班级。但我不想写像
这样的东西val b = new Bar with Foo
我需要的东西就像我只是传递一个类而且它与Foo混合在一起。我想混合这个特性,即固定所有类只应与Foo特征混合。
val b = new Factory(Bar) //Factory returns instance with trait Foo
我发现了post,但我不相信。
scala可能会出现这样的事情吗?
答案 0 :(得分:4)
目前最好的解决方案是实现Foo
这样的事情:
class Foo(bar:Bar) {
...
}
object Foo {
def apply(bar:Bar) = new Foo(bar)
implicit def backToBar = this.bar
}
然后将其用作
val foo = Foo(myBar)
对于Foo
和Bar
之间共享的任何方法名称,将使用Foo
中的版本(与mixin中的重载一样)。任何其他方法,都将使用Bar
上的变体。
这项技术并不完美,Bar
中的方法只会调用Bar
中定义的其他方法,而不会调用Foo
中定义的“重载”。否则,它非常接近您的需求。