Skip to content

Commit

Permalink
SCALA-601 Add example with different base and core traits
Browse files Browse the repository at this point in the history
  • Loading branch information
Matteo Di Pirro committed Jul 22, 2024
1 parent c499c26 commit 8398deb
Showing 1 changed file with 45 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.baeldung.scala.stackabletrait

object StackableTraitWithExplicitBaseAndCoreExample {
trait BaseIntTransformation {
def transform(value: Int): Int
}

trait CoreIntTransformation extends BaseIntTransformation {
def transform(value: Int): Int = value
}

trait DoubleTransformation extends CoreIntTransformation {
override def transform(value: Int): Int =
super.transform(value * 2)
}

trait LogInt extends CoreIntTransformation {
override def transform(value: Int): Int = {
println(s"Transforming value: $value")
super.transform(value)
}
}

trait CustomTransformation(f: Int => Int) extends CoreIntTransformation {
override def transform(value: Int): Int =
super.transform(f(value))
}

@main
def mainSTE(): Unit = {
val logAndDouble = new CoreIntTransformation
with DoubleTransformation
with LogInt {}
val doubleAndLog = new CoreIntTransformation
with LogInt
with DoubleTransformation {}
val logAndCustom = new CoreIntTransformation
with CustomTransformation(_ + 1)
with LogInt {}

println(s"Log and double: ${logAndDouble.transform(5)}")
println(s"Double and log: ${doubleAndLog.transform(5)}")
println(s"Log and increment: ${logAndCustom.transform(5)}")
}
}

0 comments on commit 8398deb

Please sign in to comment.