yoshikit1996’s diary

日々勉強したことの備忘録です。

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

Scalaでオブジェクトを定義して,関数のようにオブジェクト名()と呼び出すとapplyメソッドが自動的に呼び出される.

object Person{
    def apply(name: String) {
        println(name)
    }
}

Person("ほげほげ") // "ほげほげ"と標準出力

これを利用すると,クライアントからnew演算子を使わずにPersonをインスタンス化することができる.

class Person(val name: String)

object Person{
    def apply(name: String): Person = {
        new Person(name)
    }
}

val p = Person("ふがふが")
println(p.name) // "ふがふが"

ケースクラスならコンパニオンオブジェクトなしでインスタンス化できる.

case class Person(name: String)

val p = Person("ふがふが")
println(p.name) // "ふがふが"