トレイトのメンバとして抽象 val を宣言した場合、初期化処理のタイミングでは、その val の値が null になっていることがあります。 以下の例では、Foo の初期化時には value2 が null になっています。 object Sample1 { def main(args: Array[String]) { val foo = new FooImpl println("[main]foo.value1 is "+foo.value1) println("[main]foo.value2 is "+foo.value2) } trait Foo { // value は実装クラスで設定する val value1: String val value2: String // Foo の初期化処理 println("[foo]value1 is "+value1) println("