このブログ投稿では、Scala で ( 、、および とnull
一緒に)うまく説明しています。Null
Nil
Nothing
None
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 型システムのより有機的な部分です。関数呼び出しから。