有没有办法指定特征必须提供方法的具体实现?
给定一些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
恕我直言,一个有效的用例是冲突解决:
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
declares foo
,你可以使用类型归属:
class A extends B with C {
(this:B).foo()
}
这只会在B
声明 foo
时编译(但它可能在C
or中实现A
)。