NullPointerException
"string".equalsってバッドノウハウなの? - 神様なんて信じない僕らのためにより、NullPointerExceptionについて。
NullPointerExceptionは偉大*1だけど、
"string".equalsってバッドノウハウなの? - 神様なんて信じない僕らのために
NullPointerExceptionでnullを検知しようとする考えがそもそも間違い、な気がする。
nullの検知っていうのがちょっと広すぎるような気がする。とりあえず、
- nullが許される場合のnullの検知
- nullが許されない場合のnullの検知
- nullが許されるか許されないか不明な場合のnullの検知
くらいが考えられるかな*1。
で、nullが許される場合のnullの検知にNullPointerExceptionを使うのはたしかに考え方が間違っているけど、nullが許されない場合にnullがきた場合はまさに例外的な状況なわけで、この場合には素直にNullPointerExceptionを送出するのが正解だと思う*2。
あと、nullが許される場合自体、NullObjectで回避するのがスマートだと思う。問題はNullObjectクラスが作れない場合。Stringがそれにあたるけど、多くの場合、空文字列で代替できる。ただ、空文字列が意味を持つ場合もあるわけで、その場合にはnullを使うのもやむなしかな。
nullを排除するための方法としては、コンストラクタで引数チェックを行ってイミュータブルにしてしまう方法を使っている。こうすれば、単体テストを行うことでnullが絶対こないオブジェクトであるという安心感が持てる。まぁ、全部をこの方法で構築するのは非現実的なんだけどね。