経緯
DBから主キーをもとに特定のレコードを参照したあとに、カラム名と値をセットにMapに詰めてから値を取得しようとした時の話
Mapの値はObject型なので欲しい値をString型に変換しようと
//map:レコードの情報が入ったMap<String, Object> → <カラム名、値>
String value = map.get("カラム名").tostring();
こんな感じで書きました。
カラム名に該当する値を取ってきてObject型からString型に変換する時にtoString()を使って変数に詰めていました。
すると現場の上長からレビュー時にこんなご指摘が。。。
上長「toString()だと『ぬるぽ』しちゃうかもしれないので別のやり方で変換してください。」
私「承知です!」
(ほほう、、、なるほど、、、。
確かにカラムの値がnullの可能性もあるか、、。というかぬるぽとか気にしてなかった、、、。ってかぬるぽになるんや😇)
正直、String型に変換する時にそこまで考えていなかった私は事前に『ぬるぽ』を回避すべく、対策を見つける旅に出ました。スキルアップのチャンスです!
まあしかし、その旅は歩いて10歩ほど進んだところで終わりを迎えましたが、せっかくインプットしたものなのでアウトプットしていきます。
『ぬるぽ』ってなんぞやねん
ぬるぽぬるぽってなんぞやねん。っとツッコミが聞こえてきた気がするので
NullPointerExceptionを『ぬるぽ』って呼ぶ人たちが多いです。
っていうかNullPointerExceptionのことです。
海外ではNPE等と略されてるらしいです。
参照型で参照する値が無い時(nullの時)に怒られるパターンです。
プログラミング初心者が出くわすエラーNo.1とも言われているとかいないとか。。。
String型に変換するときに『ぬるぽ』を回避する方法
前置きが長くなりましたが、結論から言うとvalueOf()とキャストです。
valueOf()を使ってあげると変換元がnullでもnullで返してくれます。
キャストも同様です。
これらを使えば変換元がnullであってもぬるぽで落ちずに処理が通ります。
DBの値がnullを許容されていなければ回避する必要もないかもしれませんが
今回はシステムの都合上、たとえDBの値がnullでもとにかく返して欲しいのです!
valueOf()
上のコードでぬるぽを回避するなら
String value = map.get("カラム名").valueOf();
こんな感じですね。簡単です。
これだと"カラム名"に該当する値がnullでもvalue
にはnullが入ります。
nullでもいいからとりあえず値を返して!って時にはこっちですね。
キャスト
同じくキャストでぬるぽを回避するなら
String value = (String)map.get("カラム名");
キャストもvalueOfと同様で該当する値がnullの場合はvalue
にはnullが入ります。
まとめ
toString()を使うと『ぬるぽ』で落ちちゃうよって話でした。
ぬるぽだと都合が悪くなる場合は
・valueOf()でStringに変換
・キャストでStringに変換
この2つでぬるぽは回避できます。
開発ビギナーが出くわすエラー1位の『ぬるぽ』もこれで怖くないですね。