定义多个特征的最佳实践,这些特征为实现特定特征的类添加行为

Rus*_*ell 3 scala traits

假设我有一些traits,每个都为扩展的类添加一些行为Actor.

它们每个都需要一小部分方法Actor.他们都可以Actor像这样延伸吗?

trait A extends Actor {
  def doAThing = { ... }
}
trait B extends Actor {
  def doBThing = { ... }
}
trait C extends Actor {
  def doCThing = { ... }
}

class D extends Actor with A with B with C
Run Code Online (Sandbox Code Playgroud)

或者每个特征是否应该从Actor抽象方法中定义它所需的方法,以便它们由最终的具体类提供,这是唯一一个将扩展的类Actor

4e6*_*4e6 6

遗产

trait A extends Actor
Run Code Online (Sandbox Code Playgroud)

意思AActor.另一种方式是使用self-types

trait B {
  self: Actor =>
}
Run Code Online (Sandbox Code Playgroud)

意味着B需要Actor混入.

有关详情,请参阅链接问题