遅延初期化

lazy キーワードにて遅延初期化を簡単に実現できます。
以下の例の場合、

class Emp(id:Int) {
  def getId = id
  val str : String = {println("init"); "lazy?"}
}
object Example030 extends Application {
  val t = new Emp(10)
  println(t.getId)
}

実行結果は、

init
10


lazyを付けてみると必要時にのみ初期化されます。

class Emp(id:Int) {
  def getId = id
  lazy val str : String = {println("init"); "lazy?"}
}
object Example030 extends Application {
  val t = new Emp(10)
  println(t.getId)
}

実行結果は以下のようになり、str の初期化が行われていないことが分かります。

10