Classes and Objects
Companion Factory
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
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)
}
}
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)label ← T7
8def make(id7: Int): Ticket = {9 val label→ T7 = "T" + id710 new Ticket(id, label)11}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
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)label ← T3
8def make(id3: Int): Ticket = {9 val label→ T3 = "T" + id310 new Ticket(id, label)11}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
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)label ← T9
8def make(id9: Int): Ticket = {9 val label→ T9 = "T" + id910 new Ticket(id, label)11}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