scala docsによると:
Null はすべての参照型のサブタイプです。
したがって、理論的には、この例でNullは、 が (参照型) のサブタイプであり、 type のインスタンスでメソッドFooを呼び出せるはずであると想定できます。実際にはできず、コード スニペットはコンパイル時にエラーで失敗します。barNullvalue bar is not a member of Null
case class Foo(bar: String)
val n: Null = null
n.bar
scala docs にもあるよう に、コンパイル時にこれをキャッチすることは理にかなっていると[Null's] only instance is the null reference思いますが、より良いエラーメッセージはCalling bar on type Null can only result in a NullPointerException.
私の質問は、コンパイル時に失敗せず、代わりに実行時に失敗する次のコード スニペットに関するものです。NullPointerException
val n: Null = null
n.toString
これは、 Null 型が他のすべての参照型を真にサブクラス化せず、サブクラスのみをサブクラス化するためであると想定していAnyRefますが、このコードでのみ発生する可能性があるというコンパイル時エラー (または少なくとも警告) をスローしてはならない理由はありますか? NullPointerException? _ 呼び出しnull.barとnull.toString動作が異なるのは意図的ですか?