scala docsによると:
Null はすべての参照型のサブタイプです。
したがって、理論的には、この例でNull
は、 が (参照型) のサブタイプであり、 type のインスタンスでメソッドFoo
を呼び出せるはずであると想定できます。実際にはできず、コード スニペットはコンパイル時にエラーで失敗します。bar
Null
value 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
動作が異なるのは意図的ですか?