トレイトがメソッドの具体的な実装を提供する必要があることを指定する方法はありますか?
いくつかの mixin が与えられた場合
class A extends B with C {
foo()
}
A
、B
、またはのいずれかがC
実装されている場合、プログラムはコンパイルされfoo()
ます。しかし、たとえばの実装を強制的B
に含めるにはどうすればよいでしょうか。foo
次のことができます。
class A extends B with C {
super[B].foo()
}
B
これは、 implements の場合にのみコンパイルされfoo
ます。ただし、(潜在的に)直感的でない結合が発生するため、注意して使用してください。さらに、A
overridesの場合foo
、 stillが呼び出されます。B
foo
私見の有効な使用例の 1 つは、競合の解決です。
trait B { def foo() = println("B") }
trait C { def foo() = println("C") }
class A extends B with C {
override def foo() = super[B].foo()
}
B
確実に宣言し たい場合foo
は、型の割り当てを使用できます。
class A extends B with C {
(this:B).foo()
}
B
これは、 が宣言 されている場合にのみコンパイルされます (ただし、またはfoo
で実装される場合があります)。C
A