きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Javaでnullを文字列結合したら"null"になるので回避する策を模索した話

※ 20221117 更新

直接的には関係ないですが、こちらも一つの解決策です。


本番環境までは流れなかったものの、Javaで雑に文字列結合していたせいで、"null様"を出してしまいました。
回避自体は事前にNullチェックを入れれば簡単なものの、文字列結合のたびに事前チェックを入れていくのはエンジニアとしてめんどくさい。

プログラマの三大美徳の怠惰を目指すため、Javaでの文字列結合でnullを渡しつつ勝手にブランクに変換してくれるメソッドはないか探しました。

調査

環境

  • Java 11

nullを渡すとブランクとして文字列結合する

Javaでは無理そう。
文字列結合でよく使用する、String, StringBuilder, StringJoinerで検証しましたが、そういうメソッドがあるのを確認できませんでした。
どれもこれも、nullを渡すと"null"で文字列結合しました…。

しかも、これらはfinal classとして定義されているので、継承して文字列結合の直前にnullチェックを入れるということは無理そう。

あとは、AOPでできるかもしれないけど…
この程度のことでAOP使ったらデバッグが難しくなるから無し。

少なくとも、自分の知識では無理です。

nullを渡すとブランクにする

要求を下げて、まずはnullを渡すとブランクに変換するメソッドが無いか探しました。
残念ながら、Javaのデフォルトのライブラリにはなさそうでした。

一応、Apacheのライブラリにはありました。
defaultStringメソッドを使うと、渡した文字列をブランクに変換してくれます。

ただ、内部的な処理としては、nullチェックしてブランクに変換しているだけなので、自前実装でもいいかなとは思います。
こういう調査に30分持っていかれるくらいなら…。

import org.apache.commons.lang3  

class StringUtils{
    defaultString(String str){
        return str == null ? '' : str;
    };
}

結果

Javaには、nullを自動でブランクに変換して文字列結合することはできない。
nullをブランクに変換するメソッドも用意されていない。

流石に、Apacheライブラリ等には用意されているので、そちらを使って「null様」を出さないようにする。

ソースコード

類似情報