首页 > 解决方案 > NullPointerException 可能会抛出,因为此处的“值”可以为空声纳警告

问题描述

我有这样的代码,当我在声纳下运行它时,它总是在这条线上抱怨value.contains("true")

String value = getValue("/data/" + set, property);
if (!Strings.isNullOrEmpty(value)) {
  if (value.contains("true")) {
    return true;
  } else {
    return false;
  }
} else {
  return false;
}

这是它给我的信息:NullPointerException might be thrown as 'value' is nullable here

我已经在上面检查 null 检查的值,那为什么它在里面抱怨呢?难道我做错了什么?

更新:

在安迪的建议下。我重写了这样的东西:

String value = getValue("/data/" + set, property);
if (value!=null) {
  return Boolean.parseBoolean(value);
}
return false;

标签: javasonarqube

解决方案


声纳很可能不理解Strings.isNullOrEmpty.

如果您将条件写为:

if (value != null) {

contains如果你调用一个空字符串并不重要。

另外,这个:

  if (value.contains("true")) {
    return true;
  } else {
    return false;
  }

更容易写成

  return value.contains("true");

总的来说,你可以这样写:

return value != null && value.contains("true");

编辑您的更新:如果您正在使用Boolean.parseBoolean,您甚至不需要空检查。parseBoolean返回false空输入。

String value = getValue("/data/" + set, property);
return Boolean.parseBoolean(value);

推荐阅读