4

有没有办法指定特征必须提供方法的具体实现?

给定一些mixin

class A extends B with C {
  foo()
}

A如果、BC实现,则程序将编译foo()。但是,例如,我们如何强制B包含foo' 的实现?

4

1 回答 1

10

您可以执行以下操作:

class A extends B with C {
  super[B].foo()
}

B 只有在implements 时才会编译foo。但请谨慎使用,因为它(可能)引入了一些不直观的耦合。此外,如果Aoverrides foo, still将被调用Bfoo

恕我直言,一个有效的用例是冲突解决

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时编译(但它可能在Cor中实现A)。

于 2013-07-25T00:08:26.777 回答