【问题标题】:How do I fix this dereference of nullable error?如何解决此可空错误的取消引用?
【发布时间】:2019-04-11 15:05:38
【问题描述】:

我一直在努力摆脱可能的空引用图的取消引用,但似乎没有任何效果。

这是我的原始代码:

if (!pluto.get(boxer.getName()).contains(boxer)) {
   pluto.get(boxer.getName()).add(boxer);
}

其中 pluto 是私有 final Map> pluto;

我也试过了

if (pluto.get(boxer.getName()) != null) {
        if (!pluto.get(boxer.getName()).contains(boxer)) {
                pluto.get(boxer.getName()).add(boxer);
        }
}

但这也行不通。请帮忙。

[dereference.of.nullable] 可能为空的引用 pluto.get(boxer.getName()) 的解引用

【问题讨论】:

  • 什么 pluto.get(boxer.getName()) 返回?
  • 能否分享完整代码?
  • 它返回它映射到的字符串集。我不知道为什么,但堆栈溢出删除了我的图表实现。它是私有的最终 Map> pluto
  • 可能有两种可能性,一种地图为空,另一种可能是 boxer.getName 为空,您也可以通过运行代码来验证是否处于调试模式,这样您就可以检查元素并检查什么是空的。
  • 在调用“if (pluto.get(boxer.getName()) != null)”之前,您需要检查 pluto 是否为 null 或 boxer 是否为 null。如果其中任何一个为 null,则会抛出 NullpointerException。

标签: java null dereference


【解决方案1】:

如果您的地图为空怎么办?

试试这个:

if (isNull(pluto)) { // import static java.util.Objects.isNull;
   return;        // to minimise nesting
}

Optional.ofNullable(pluto.get(boxer.getName()))
        .filter(value -> !value.isEmpty())
        .ifPresent(value -> { /*do whatever you want*/ });

【讨论】:

    【解决方案2】:

    试试这个。您需要检查空值。

    if (pluto != null && pluto.get(boxer.getName()) != null && !pluto.get(boxer.getName()).contains(boxer)) {
        pluto.get(boxer.getName()).add(boxer);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2012-09-25
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多