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

标签 java null sonarqube equals

SonarQube 在我的质量代码报告中抛出了一个重大错误:

Remove this call to "equals"; comparisons against null always return false; consider using '== null' to check for nullity.

但是,这个 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 spec 中有明确定义,则 equals 的合约:

For any non-null reference value x, x.equals(null) should return false.

如果您在覆盖中采取了不同的做法 - 您就做错了。

关于java - 测试 equals() 时解决 SonarQube 中的 "null comparison"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414011/

相关文章:

java - org.bouncycaSTLe.asn1.ASN1ObjectIdentifier”的签名者信息与签名者信息不匹配

java - 在mysql中设置event_scheduler

hadoop - 无法将数据从 CSV 文件加载到 HIVE

java - 仅当方法位于同一类中时才存储值

java - 使用非嵌入式数据库时,SonarQube 无法在 Ubuntu 上运行。 (elasticsearch启动失败)

java - Jenkins Sonar 检查失败 : Caused by: java. lang.ClassNotFoundException : org. sonar.api.checks.NoSonarFilter

java - 如何在 google checkstyle.xml 中的方法之前添加一个选项卡

java - 是否可以创建多个对象的列表,其中对象采用多个参数?

sql - 为什么 PostgreSQL COPY 命令不允许数组中存在 NULL 值?

java - jackson/json 模式 - 用外部 json 模式生成器模块替换 ISO8601Utils