Type Parameters and Generics
Generic Pair Fields
Use two type parameters for two related fields.
two-type-parameters
`PairBox[A, B]` can hold values with two different types. The example reads the fields separately and formats a scalar summary.
Generic Pair Fields
GenericPairFields.scala
Replay: real traced execution (multi-file project)
case class PairBox[A, B](left: A, right: B)
object Main {
def main(args: Array[String]): Unit = {
val label = "job"
val count = 4
val pair = PairBox[String, Int](label, count)
val summary = pair.left + ":" + pair.right
println("left=" + pair.left)
println("right=" + pair.right)
println("summary=" + summary)
}
}
case class PairBox[A, B](left: A, right: B)
object Main {
def main(args: Array[String]): Unit = {
val label = "task"
val count = 4
val pair = PairBox[String, Int](label, count)
val summary = pair.left + ":" + pair.right
println("left=" + pair.left)
println("right=" + pair.right)
println("summary=" + summary)
}
}
case class PairBox[A, B](left: A, right: B)
object Main {
def main(args: Array[String]): Unit = {
val label = "ticket"
val count = 4
val pair = PairBox[String, Int](label, count)
val summary = pair.left + ":" + pair.right
println("left=" + pair.left)
println("right=" + pair.right)
println("summary=" + summary)
}
}
label ← job, count ← 4, pair ← PairBox(job,4), summary ← job:4
3object Main {4 def main(args: Array[String]): Unit = {5 val label→ job = "job" //@label="task", "ticket"6 val count→ 4 = 47 val pair→ PairBox(job,4) = PairBox[String, Int](labeljob, count4)8 val summary→ job:4 = pairPairBox(job,4).left + ":" + pair.right4910 println("left=" + pair.leftjob)11 println("right=" + pair.right4)12 println("summary=" + summaryjob:4)13 }14}outputleft=job right=4 summary=job:4
label ← task, count ← 4, pair ← PairBox(task,4), summary ← task:4
3object Main {4 def main(args: Array[String]): Unit = {5 val label→ task = "task"6 val count→ 4 = 47 val pair→ PairBox(task,4) = PairBox[String, Int](labeltask, count4)8 val summary→ task:4 = pairPairBox(task,4).left + ":" + pair.right4910 println("left=" + pair.lefttask)11 println("right=" + pair.right4)12 println("summary=" + summarytask:4)13 }14}outputleft=task right=4 summary=task:4
label ← ticket, count ← 4, pair ← PairBox(ticket,4), summary ← ticket:4
3object Main {4 def main(args: Array[String]): Unit = {5 val label→ ticket = "ticket"6 val count→ 4 = 47 val pair→ PairBox(ticket,4) = PairBox[String, Int](labelticket, count4)8 val summary→ ticket:4 = pairPairBox(ticket,4).left + ":" + pair.right4910 println("left=" + pair.leftticket)11 println("right=" + pair.right4)12 println("summary=" + summaryticket:4)13 }14}outputleft=ticket right=4 summary=ticket:4