あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

シングルトンオブジェクト

  • Scala ではすべてがオブジェクトのため Javaの static フィールド、クラスの定数、クラスメソッドはないがシングルトンオブジェクトの宣言 object をサポートしている。
  • object のメンバは、ちょうどjava のクラスの static フィールドメンバと同じような扱いになる。
  • object の本体はコンストラクタで、クラスと同じだが、パラメータは指定できない。
  • シングルトンオブジェクトは、システムのランタイムで自動生成される。
  • シングルトンオブジェクトで型の定義はされない。(コンパイル後に名前の後に$のついた final class Foo$ .. が自動生成される。)
class Foo(v:Int) {
  Foo.bar(v)
  def get = v + 3
}

object Foo {
  def main(argv: Array[String]) {
    val foo = new Foo(7)
    println("foo.get = " + foo.get)
  }
  def bar(v:Int) = println("Foo.bar = " + v)
}
  • シングルトンオブジェクト( object )は、同じソースファイル内に定義した class と同じ名前の時はその class のコンパニオンオブジェクトになる。そしてその class は object のコンパニオンクラスになる。コンパニオンクラスと同じ名前ではない場合はスタンドアロンオブジェクトになる。