有没有办法指定特征必须提供方法的具体实现?
给出一些mixin
class A extends B with C {
foo()
}
如果A
,B
或C
中的任何一个实现foo()
,程序将进行编译。但是,我们如何强迫B
包含foo
的实施?
答案 0 :(得分:10)
您可以执行以下操作:
class A extends B with C {
super[B].foo()
}
只有B
实现 foo
时才会编译。但请谨慎使用,因为它(可能)会引入一些不直观的耦合。此外,如果A
覆盖foo
,则仍会调用B
的{{1}}。
一个恕我直言有效用例是conflict resolution:
foo
如果您想确保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
中实施)。