Skip to content

Commit 3e6e704

Browse files
Merge pull request #1718 from cawpat/master
[SCALA-339] - Usage of val and def fields in traits
2 parents 146784a + aaff774 commit 3e6e704

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-0
lines changed

build.sbt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ lazy val scala_core_9 = (project in file("scala-core-modules/scala-core-9"))
119119
libraryDependencies += "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0" % Test
120120
)
121121

122+
lazy val scala_core_10 = (project in file("scala-core-modules/scala-core-10"))
123+
.settings(
124+
name := "scala-core-10",
125+
libraryDependencies ++= scalaTestDeps,
126+
scalaVersion := scala3Version,
127+
libraryDependencies += "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0" % Test
128+
)
129+
122130
lazy val scala_core_numbers =
123131
(project in file("scala-core-modules/scala-core-numbers"))
124132
.settings(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
### Relevant Articles
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.baeldung.scala.valsintraits
2+
3+
import java.time.LocalDateTime
4+
5+
object ValInTraitExamples {
6+
trait CurrentTimePrinter {
7+
val currentTime: LocalDateTime
8+
def printCurrentTime(): Unit
9+
}
10+
object TimePrinterImpl extends CurrentTimePrinter {
11+
override val currentTime: LocalDateTime = LocalDateTime.now()
12+
override def printCurrentTime(): Unit = println(currentTime)
13+
}
14+
15+
trait CurrentTimePrinterWithDef {
16+
def currentTime: LocalDateTime
17+
def printCurrentTime(): Unit
18+
}
19+
object TimePrinterWithDefImpl extends CurrentTimePrinterWithDef {
20+
override def currentTime: LocalDateTime = LocalDateTime.now()
21+
override def printCurrentTime(): Unit = println(currentTime)
22+
}
23+
24+
trait TraitA {
25+
val multiplier: Int
26+
val result: Int = multiplier * 7
27+
}
28+
trait TraitB {
29+
val multiplier: Int = 10
30+
}
31+
trait TraitAWithDef {
32+
val multiplier: Int
33+
def result: Int = multiplier * 7
34+
}
35+
36+
object AB extends TraitA with TraitB
37+
object BA extends TraitB with TraitA
38+
object ABWithDef extends TraitAWithDef with TraitB
39+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.baeldung.scala
2+
3+
import com.baeldung.scala.valsintraits.ValInTraitExamples
4+
import org.scalatest.flatspec.AnyFlatSpec
5+
import org.scalatest.matchers.should.Matchers
6+
7+
class ValInTraitExamplesUnitTest extends AnyFlatSpec with Matchers {
8+
"TimePrinterImpl" should "return same time every call" in {
9+
val printer = ValInTraitExamples.TimePrinterImpl
10+
val first = printer.currentTime
11+
Thread.sleep(10)
12+
val second = printer.currentTime
13+
14+
first.shouldBe(second)
15+
}
16+
17+
"TimePrinterWithDefImpl" should "return different time every call" in {
18+
val printer = ValInTraitExamples.TimePrinterWithDefImpl
19+
val first = printer.currentTime
20+
Thread.sleep(10)
21+
val second = printer.currentTime
22+
23+
first should not be second
24+
}
25+
26+
"ClassAB" should "return result as 0" in {
27+
val classAb = ValInTraitExamples.AB
28+
classAb.result shouldBe 0
29+
}
30+
31+
"ClassBA" should "return result as 70" in {
32+
val classBa = ValInTraitExamples.BA
33+
classBa.result shouldBe 70
34+
}
35+
36+
"ClassABWithDef" should "return result as 70" in {
37+
val classAbWithDef = ValInTraitExamples.ABWithDef
38+
classAbWithDef.result shouldBe 70
39+
}
40+
}

0 commit comments

Comments
 (0)