首页 > 解决方案 > SonarLint :更改此条件,使其不总是评估为“真”

问题描述

这是我的代码

@Override
protected void setValue(Object value) {
    if (Boolean.TRUE.equals(value)) {
        // do something for true
    } else if (Boolean.FALSE.equals(value)) {
        // do something for false
    } else if (null == value) { // got SonarLint warning here
        // do something for null
    } else {
        // for any other non-null and not Boolean object call the super method
        super.setValue(value);
    }
}

在标记为“// 此处收到 SonarLint 警告”的行处,我收到警告:Change this condition so that it does not always evaluate to "true。我应该如何改变我的方法以避免这个警告?

标签: javasonarlint

解决方案


如果 value 是 Boolean 并且它既不是 TRUE 也不是 FALSE,那么它必须为 null,因为 Boolean 对象只能是 TRUE 或 FALSE。因此,如果它没有落入前两个 if 语句,则 value 始终为 null,因此发出 sonarlint 警告。在你的情况下,我会做这样的事情:

   if (value instanceof Boolean) {
        if (Boolean.TRUE.equals(value)) {
            // do something for true
        }
        else {
            // do something for false
        }
    }
    else if (value != null) {
        // for any other non-null and not Boolean object call the super method
        super.setValue(value);
    }
    else {
           // do something for null
    }

推荐阅读