kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

scala.NotNull

第2回Scala言語仕様輪読会@scala-beにそなえて、Scala Language SpecificationのChapter 3を読んでいて気づいたのだが、scala.NotNullのサブタイプの型はnullを代入できない型になるのね。Scala知って結構経つが知らなかった。

scala> class A
defined class A

scala> val a1: A = new A
a1: A = A@15e8aa5

scala> val a2: A = null
a2: A = null

scala> class B extends NotNull
defined class B

scala> val b1: B = new B
b1: B = B@75a340

scala> val b2: B = null
<console>:5: error: type mismatch;
 found   : Null(null)
 required: B
       val b2: B = null
                   ^