【问题标题】:SonarLint : Change this condition so that it does not always evaluate to "true"SonarLint :更改此条件,使其不总是评估为“真”
【发布时间】:2020-01-11 04:29:48
【问题描述】:

这是我的代码

@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。我应该如何更改方法以避免出现此警告?

【问题讨论】:

  • 这个方法还可以获取另一个对象,例如String。
  • 如果你把null的情况放在第一位呢?
  • 已经试过了,在这种情况下我会收到Boolean.FALSEcheck 的消息

标签: java sonarlint


【解决方案1】:

如果 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
    }

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 2016-05-14
    • 2020-06-01
    • 2018-10-04
    • 2018-05-07
    • 2017-06-12
    • 2018-08-01
    • 2021-01-05
    • 2018-08-17
    相关资源
    最近更新 更多