字符串文本表达式应位于等值比较的左侧
!mapData.get("PARTY_ID").equals("") // <-- gives SonarQube error
在上面的代码中,我在Sonar中得到了“字符串文字表达式应该在等式比较的左侧”这个错误。那么我们如何才能避免它。
我试过这个:
("").equals(!mapData.get("CON_PTY_PARTY_ID"))
但它不起作用。给一些建议...
!mapData.get("PARTY_ID").equals("") // <-- gives SonarQube error
在上面的代码中,我在Sonar中得到了“字符串文字表达式应该在等式比较的左侧”这个错误。那么我们如何才能避免它。
我试过这个:
("").equals(!mapData.get("CON_PTY_PARTY_ID"))
但它不起作用。给一些建议...
其他人指出,避免此错误的方法是使用:
! ("".equals(mapData.get("CON_PTY_PARTY_ID")))
但没有人指出为什么这很重要。文本应位于等值比较的左侧的原因是为了避免在与其进行比较的字符串为 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")))