4. Companion object - Gaoey/scala-diary GitHub Wiki

An object with the same name as a class is called a companion object.

ความสามารถ

A companion class or object can access the private members of its companion.

import scala.math._

case class Circle(radius: Double) {
  import Circle._
  def area: Double = calculateArea(radius)
}

object Circle {
  private def calculateArea(radius: Double): Double = Pi * pow(radius, 2.0)
}

val circle1 = new Circle(5.0)

circle1.area

class Donut(name: String, productCode: Long){
  def print = s"Donut name = $name, productCode = $productCode"
}

object Donut {
  def apply(name: String, productCode: Long): Donut = {
    new Donut(name, productCode)
  }
}

val glazedDonut = Donut("Glazed Donut", 1111)
val vanillaDonut = Donut("Vanilla Donut", 2222)

glazedDonut.print should be("Donut name = Glazed Donut, productCode = 1111")
vanillaDonut.print should be("Donut name = Vanilla Donut, productCode = 2222")

Tips:

case classes will also create companion objects for you

case class Donut(name: String, productCode: Long){
  def print = s"Donut name = $name, productCode = $productCode"
}

val test = Donut("test", 111)

test.print should be("Donut name = test, productCode = 111")