「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Javaで Long 型を String 型に変換する際、通常の toString() メソッドを用いると、もしその Longnull だった場合に NullPointerException が発生してしまうことがあります。
このようなケースを安全に扱うため、Java標準ライブラリの Objects クラスが提供する toString(Object o, String nullDefault) メソッドを活用する方法をご紹介します。
このメソッドを使えば、null の時に返すデフォルト文字列をあらかじめ指定できるため、例外を防ぎつつ意図した文字列変換を行うことができます。


なぜ通常の変換が問題になるのか?

例えば次のようなコードを考えます:

valuenull の場合、value.toString() は実行できず例外になります。
また、String.valueOf(value) を使う手もありますが、valuenull の際には "null" という文字列が返されるだけで、「空文字」や「0」など別のデフォルト値を返したい場合には少し不便です。

その点、 Objects.toString() を使うと、次のように記述できます:

このように書くことで、valuenull の場合に ""(空文字)を返すように明示できます。


Objects.toString() の使い方

メソッド概要

  • public static String toString(Object o)
     – 引数 onull でないなら o.toString() を返し、null の場合 "null" を返します。 Oracle Docs+1

  • public static String toString(Object o, String nullDefault)
     – 引数 onull でないなら o.toString() を返し、null の場合に nullDefault を返します。 Oracle Docs+1

長所

  • null であっても例外を起こさず、安全に文字列変換できる

  • null 時に返す文字列を任意に指定できるため、要件に応じた挙動(空文字・「不明」・「0」など)にできる

  • 可読性の高いコードになる(いちいち三項演算子で ((value != null) ? value.toString() : "") と書かなくても済む)

短所・注意点

  • 引数が null の場合に "null" を返す第一バージョンを使うと、意図せず "null" が画面やログに出てしまう可能性あり

  • toString() のオーバーライドにより、実際の文字列表現が想定と異なる場合もある(設計に注意)

  • フィールドが null かどうかチェックせずに toString() を呼び出してしまうと、やはり例外になる(あくまで Objects.toString()null オブジェクト自身を安全に扱うわけで、フィールド内部が null だと別途対策が必要)


サンプルコード(JUnitを用いたテスト例)

以下に、Long 型を String に変換する例を示します。特に null のケースも含めてテストしています。

このように書くと、

  • longValue = 123L のとき → "123"

  • longValue = null のとき(引数なし版) → "null"

  • longValue = null のとき(第二引数あり版) → ""(空文字)
    という挙動になります。


実践上の応用・ベストプラクティス

  • 文字列変換した結果をそのまま画面表示やログに出すケースでは、null をそのまま "null" と表示するのはあまり望ましくありません。空文字にするか、「未設定」など適切な文言を返すように設計するとユーザービリティが向上します。

  • 複数のフィールドを含むクラスの toString() をオーバーライドする際、各フィールドについて Objects.toString(field, "<デフォルト>") を使うことで、null 安全かつ可読性を確保できます。

  • デフォルトの toString() (つまり Object#toString())をそのまま使うと、クラス名+ハッシュコードのようなあまり意味のない文字列になるため、ログ出力やデバッグ目的では専用に toString() を実装しておくのが望ましいです。 Stack Overflow+1

  • もしも LongString に変換した結果を数値演算などに再利用する可能性があるなら、変換過程で null"0" に置き換えるか、あるいは Optional<Long>long のプリミティブ型(0値)を使うことも検討すべきです。

  • プリミティブ型 long と参照型 Long の違い(null を許すかどうか)を理解したうえで、参照型を使うなら常に null チェックを意識しましょう。


まとめ

  • Long 型から String 型への変換では、null を考慮しないと例外や意図しない "null" 表示が発生する可能性があります。

  • Java標準の Objects.toString(Object o, String nullDefault) を使えば、null の場合に返す文字列を明示でき、安全に文字列に変換可能です。

  • 複数フィールドを持つモデルの toString() 実装時や、ユーザーに表示する文字列生成時には、この手法を取り入れることで可読性と堅牢性が向上します。

  • 実際の値変換だけでなく、表示/ログ目的での文字列生成やデバッグ用途も含めて、どのような null 措置を行うかを設計段階で検討しておくのがベストです。

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x