java - 可能会抛出 NullPointerException,因为 'value' 此处可为空 Sonar 警告

标签 java sonarqube

我有这样的代码,当我在 Sonar 下运行它时,它总是在这一行提示 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,因为“值”在这里可为空

我已经在上面检查空检查的值,那么为什么它在里面提示呢?我做错了什么吗?

更新:

根据安迪的建议。我重写了这样的内容:

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

最佳答案

Sonar 可能不理解 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,您甚至不需要 null 检查。 parseBoolean 对于空输入返回 false

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

关于java - 可能会抛出 NullPointerException,因为 'value' 此处可为空 Sonar 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593960/

相关文章:

java - 二维多类型列表

Java:实现一个列表

java - 如何对齐按钮

java - HQL 变量 过滤案例

java - Spring Boot 3.0 + AKS = 始终为 200,响应为空

git - 如何通过 API 从 SonarQube 项目中检索分支信息?

reactjs - SonarQube 对 JSX 文件的分析

java - 将 Json 解析为 Java

docker - SonarQube Docker 安装 CorruptIndexException : checksum failed

c# - SonarQube 使用模块方法报告单个项目中的 C# 和 JS 文件?