Skip to content
Scala

Traits et Mixins

Composer des comportements avec des traits à implémentation par défaut.

#trait#mixin#composition

Code

scala
trait Logger {
  def log(msg: String): Unit = println(s"[LOG] $msg")
}

trait TimestampedLogger extends Logger {
  override def log(msg: String): Unit =
    super.log(s"${System.currentTimeMillis()} - $msg")
}

class Service extends TimestampedLogger {
  def run(): Unit = log("Service started")
}

// Linearization: Service -> TimestampedLogger -> Logger
new Service().run()
// [LOG] 1700000000000 - Service started