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

label
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)
  }
}
  1. 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
  1. 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
  1. 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