在测试 equals() 时解决 SonarQube 中的"null comparison"错误



SonarQube在我的质量代码报告中给我抛出了一个主要错误:

删除对"等于"的调用;与 null 的比较始终返回 false;请考虑使用 '== null' 来检查 null。

但是,这个equals调用是覆盖的调用,这意味着我想测试如果我的对象在equals()方法中实际上是 null 会发生什么。

这个问题有什么解决方法吗?我不应该测试我的对象的可空性,还是别无选择,只能忽略这种情况?


编辑注释中要求的代码:

对象本身:

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyTestedObject other = (MyTestedObject) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (type != other.type)
return false;
return true;
}

测试内部:

@Test
public void test()    {
MyTestedObject testedObject = new MyTestedObject();
boolean nullValue = testedObject.equals(null);
Assert.assertFalse(nullValue);
}

SonarQube 告诉你你的代码中有一个错误。如果在 java 规范中明确定义,则equals的合约:

对于任何非空引用值xx.equals(null)应返回 false。

如果你在覆盖中以不同的方式做 - 你做错了。

相关内容

  • 没有找到相关文章

最新更新