SonarQube在我的质量代码报告中给我一个重大错误:
将此调用移至“等于”;与null的比较总是返回false;考虑使用'== 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);
}
答案 0 :(得分:4)
SonarQube告诉您,您的代码中存在错误。 equals
的合同,如果在java spec中明确定义:
对于任何非空引用值
x
,x.equals(null)
应返回false。
如果你在覆盖中采用不同的方式 - 你做错了。