1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Java】toString()だと『ぬるぽ』になる話

Posted at

経緯

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位の『ぬるぽ』もこれで怖くないですね。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?