このブログ投稿では、Scala で ( 、、および とnull一緒に)うまく説明しています。NullNilNothingNone
Nullこれは (特性に慣れていない場合)、Java の抽象クラスのようなものです。のインスタンスが 1 つだけ存在しNull、それが ですnull。それほど難しくありません。リテラルnullは、Java と同じ目的を果たします。どのオブジェクトも参照していない参照の値です。したがって、 type のパラメーターを受け取るメソッドを作成する場合、Null渡すことができるのは、nullそれ自体または type の参照の2 つだけNullです。
したがってnull、Scala 型システムでは 以外の型のインスタンスではありませんNull。
scala> null.isInstanceOf[Any]
res1: Boolean = false
OK、それは then のインスタンスに違いありませんNullよね? 良い...
scala> null.isInstanceOf[Null]
<console>:8: error: type Null cannot be used in a type pattern or isInstanceOf test
null.isInstanceOf[Null]
全体として、他の人が指摘したように、 JavaNullとnullの下位互換性のためにのみ存在します。それ以外の場合Nullは と同じステータスNothingですが、後者にはインスタンスがなく、空のコレクションの定義や異常終了など、特定の使用シナリオで明確に定義された役割があるため、Scala 型システムのより有機的な部分です。関数呼び出しから。