!mapData.get("PARTY_ID").equals("") // <-- gives SonarQube error
上記のコードでは、Sonarでこのエラーが発生します。「文字列リテラル式はequals比較の左側にある必要があります」。では、どうすればそれを回避できるのでしょうか。
私はこれを試しました:
("").equals(!mapData.get("CON_PTY_PARTY_ID"))
しかし、それは機能しません。アドバイスをお願いします......
このエラーを回避する方法は次を使用することであると指摘する人もいます。
_! ("".equals(mapData.get("CON_PTY_PARTY_ID")))
_
しかし、誰も指摘していませんなぜこれは重要です。リテラルをequals比較の左側に配置する必要がある理由は、比較対象の文字列がnullの場合に例外が発生する可能性を回避するためです。
質問に書かれているように、mapData.get("CON_PTY_PARTY_ID")
の値がnull
の場合、式はオブジェクトのequals(..)
メソッドを呼び出そうとします。存在しません。それは例外をスローします。リテラルを左側に配置すると、mapData.get("CON_PTY_PARTY_ID")
の値がnull
であっても、メソッド"".equals(...)
が定義され、例外はスローされません。単にfalse
を返します。
空白の文字列を引用符で囲むことはできません。 _("").equals(!mapData.get("CON_PTY_PARTY_ID"))
_は! ("".equals(mapData.get("CON_PTY_PARTY_ID")))
である必要があります
Kevin W.の答えは正しいですが、エラーがあります。
空白の文字列を引用符で囲むことはできません。
("").equals(mapData.get("CON_PTY_PARTY_ID"))
する必要があります
!("".equals(mapData.get("CON_PTY_PARTY_ID")))
上記は正しいです。
編集: