nullable キーワード

コーディングをしていて良くおもうのですが、null じゃまくさくないですか?
もちろん、無ければ困ることもあるのですがほとんどの場合、変数は何らかのインスタンスを参照している状態ではないかと。
そこで、考えました。変数はデフォルトで必ず「非 null」でなければならない、という制約を導入し、もともと想定している動きとして null を保持する変数のみ nullable*1 というキーワードをつけるというのはどうでしょう?

そして、nullable な変数の参照は、同様に nullable 変数にしか代入できないこととします。メソッドの戻り値についても同様の制約を導入します。この制約に違反している場合、コンパイル時にエラーを発生させることになります。
その結果、NullPointerException によるバグは大幅に減るのではないでしょうか?*2

*1:nullable ではなく、not null でもいいかもしれませんが、nullable の方が安全性が高まりそうな気がするので。

*2:明示的に指定していない限り、コンパイル時に null である可能性を許容しなくなるので、よくある NullPointerException を握りつぶすコードとは別物です。