object

  • object はいわゆるシングルトンを作るための構文。
  • シングルトンであり、C#Java で言うところの static class ではない
    • なので、traitinterface を継承できる
  • 他言語との最大の違いは、class と名前が同じものを宣言できる。
  • class, case class と同名の object はコンパニオンオブジェクトと呼ばれる。
class Foo {}

object Foo {
  val VALUE: Type = "FooBar"
}

コンパニオンオブジェクト

  • class, case class と同じ名前の object

object の特殊なメソッド

apply メソッド

  • [object 名](引数) という形で呼び出すことのできるメソッド
  • object 内で apply という名前でメソッドを定義すればいい
  • コンパニオンオブジェクト内で定義してファクトリーメソッドとして使われることが多い
  • List(item1, item2, ...) でリストが生成される仕掛けはこれ
object List[A] {
  def apply(items: A*): List[A] = { new List 的なコ }
}

val list: List[String] = List("Foo", "Bar")