web-dev-qa-db-ja.com

文字列リテラル式は、等しい比較の左側にある必要があります

!mapData.get("PARTY_ID").equals("")         // <-- gives SonarQube error

上記のコードでは、Sonarでこのエラーが発生します。「文字列リテラル式はequals比較の左側にある必要があります」。では、どうすればそれを回避できるのでしょうか。

私はこれを試しました:

("").equals(!mapData.get("CON_PTY_PARTY_ID"))

しかし、それは機能しません。アドバイスをお願いします......

12
Wolverine789

このエラーを回避する方法は次を使用することであると指摘する人もいます。

_! ("".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を返します。

33
Mark Meuer

空白の文字列を引用符で囲むことはできません。 _("").equals(!mapData.get("CON_PTY_PARTY_ID"))_は! ("".equals(mapData.get("CON_PTY_PARTY_ID")))である必要があります

2
Kevin W.

Kevin W.の答えは正しいですが、エラーがあります。

空白の文字列を引用符で囲むことはできません。

  ("").equals(mapData.get("CON_PTY_PARTY_ID")) 

する必要があります

  !("".equals(mapData.get("CON_PTY_PARTY_ID")))

上記は正しいです。

編集:

ソース: https://jira.codehaus.org/browse/SONARJAVA-224

1
krodmannix