【SpringBoot開発】LSC_LITERAL_STRING_COMPARISONを解消する
こんにちは、新卒で未経験からITエンジニアになり、毎日Javaをゴリゴリ書いているはらじょです。
最近はSpringBootでバッチ開発を行っています。
自分が開発したコードが適切か(カジュアルに言うとイケているコードか?)を調べる手段として、「gradlew build」を実行することがありますよね。スタイルや無駄な条件分岐など教えてくれる便利なコマンドです。
今回は私がgradlew build実行時に遭遇したバグについての備忘録です。同じような箇所でハマってしまう方 & 未来の自分のためになれば嬉しいです。
LSC_LITERAL_STRING_COMPARISON
バグの内容
バグとしては、下記の通り。
#Spotbugs Report
## LSC_LITERAL_STRING_COMPARISON
“`text
This line is in the form of
String str = ..
str.equals(“somethingOtherSting”);
//or
str.compareTo(“someOtherString”);
A NullPointException may occur if the String variable str is null.
If instead the code was restructured to
String str = “someOtherString”.equals(str);
//or
“someOtherString”.compareTo(str);
That is, call equals() or compareTo() on the sting literal, passing the variable as an argument, then this exception could never happen as both euals() and compareTo() check for null.
“`
バグのざっくり和訳
## LSC_LITERAL_STRING_COMPARISON [文字列の比較]
This line is in the form of [この行は次の形である]
String str = ..
str.equals(“somethingOtherSting”); [文字列変数 str = 文字列.equals(何か他の文字列)]
//or [または]
str.compareTo(“someOtherString”); [文字列変数 str = 文字列.compareTo(何か他の文字列)]
A NullPointException may occur if the String variable str is null. [文字列変数strがnullの場合、ヌルポが起こるかもしれない]
That is, call equals() or compareTo() on the sting literal, passing the variable as an argument, then this exception could never happen as both euals() and compareTo() check for null.[つまり、文字列で equals()またはcompareTo() を呼び出し、変数を引数として渡すと、euals() と compareTo() はnull をチェックするため、この例外は発生しません。]
バグの解釈
「NullPointException(通称ヌルポ)が起きないような書き方をしなさい」と怒られています。
ヌルポは、コード実行時の異常です。
今回の場合でいうと、
×変数.equals(文字列)
〇文字列.equals(変数)
にしなさいということですね。
「Null.equals()にすると、エラー起きるよ!」と諭してくれているわけです。
checkstyleMain
バグの内容
>Task :CheckstyleMain
[ant:checkstyle][WARN] ファイルのパス : JavaDoc???????????? [SummaryJavadoc]
Checkstyle fieswith violations : 1
Checkstyle vilations by severity: [warning:9]
>Task :spotbugMain
バグの解釈
このバグはメソッドの定義の日本語に「。」を付けることにより解消。
表記を統一したほうがいいってことなのかな?