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
的合约:
对于任何非空引用值
x
,x.equals(null)
应返回 false。
如果你在覆盖中以不同的方式做 - 你做错了。