Use a companion object to create a class instance.

companion-factory A companion object can hold constants and factory methods for a class with the same name.

Companion Factory

id
CompanionFactory.scala
Replay: real traced execution (multi-file project)
class Ticket(val id: Int, val label: String) {
  override def toString: String = "[ticket]"
}

object Ticket {
  val Prefix = "T"

  def make(id: Int): Ticket = {
    val label = "T" + id
    new Ticket(id, label)
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val id = 7
    val ticket = Ticket.make(id)

    println("id=" + ticket.id)
    println("label=" + ticket.label)
  }
}
class Ticket(val id: Int, val label: String) {
  override def toString: String = "[ticket]"
}

object Ticket {
  val Prefix = "T"

  def make(id: Int): Ticket = {
    val label = "T" + id
    new Ticket(id, label)
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val id = 3
    val ticket = Ticket.make(id)

    println("id=" + ticket.id)
    println("label=" + ticket.label)
  }
}
class Ticket(val id: Int, val label: String) {
  override def toString: String = "[ticket]"
}

object Ticket {
  val Prefix = "T"

  def make(id: Int): Ticket = {
    val label = "T" + id
    new Ticket(id, label)
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val id = 9
    val ticket = Ticket.make(id)

    println("id=" + ticket.id)
    println("label=" + ticket.label)
  }
}
  1. id ← 7

    14object Main {15  def main(args: Array[String]): Unit = {16    val id→ 7 = 7 //@id=3, 917    val ticket = Ticket.make(id7)1819    println("id=" + ticket.id)
  2. label ← T7

    8def make(id7: Int): Ticket = {9  val label→ T7 = "T" + id710  new Ticket(id, label)11}
  3. ticket ← [ticket]

    16    val id = 7 //@id=3, 917    val ticket→ [ticket] = Ticket.make(id7)1819    println("id=" + ticket.id7)20    println("label=" + ticket.labelT7)21  }22}
    outputid=7
    label=T7
  1. id ← 3

    14object Main {15  def main(args: Array[String]): Unit = {16    val id→ 3 = 317    val ticket = Ticket.make(id3)1819    println("id=" + ticket.id)
  2. label ← T3

    8def make(id3: Int): Ticket = {9  val label→ T3 = "T" + id310  new Ticket(id, label)11}
  3. ticket ← [ticket]

    16    val id = 317    val ticket→ [ticket] = Ticket.make(id3)1819    println("id=" + ticket.id3)20    println("label=" + ticket.labelT3)21  }22}
    outputid=3
    label=T3
  1. id ← 9

    14object Main {15  def main(args: Array[String]): Unit = {16    val id→ 9 = 917    val ticket = Ticket.make(id9)1819    println("id=" + ticket.id)
  2. label ← T9

    8def make(id9: Int): Ticket = {9  val label→ T9 = "T" + id910  new Ticket(id, label)11}
  3. ticket ← [ticket]

    16    val id = 917    val ticket→ [ticket] = Ticket.make(id9)1819    println("id=" + ticket.id9)20    println("label=" + ticket.labelT9)21  }22}
    outputid=9
    label=T9