【问题标题】:Getting sonarlint error in eclipse while trying to get value from hashmap尝试从 hashmap 中获取值时在 Eclipse 中出现 sonarlint 错误
【发布时间】:2020-07-29 15:18:16
【问题描述】:

我在尝试从 hashmap 获取值时遇到 “在访问值之前调用“Optional#isPresent()” 之类的错误。

代码:

String promolevelname = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().get();

请给我一个解决这个问题的方法,谢谢

【问题讨论】:

    标签: java sonarlint-eclipse


    【解决方案1】:

    提示代码行

    eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst()
    

    正在返回一个 Optional 对象,您应该检查它是否不是“null”,然后才对其执行 get()。

    一种可能的解决方案是:

    Optional<String> promolevelnameOpt = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().get();
    if (promolevelnameOpt.isPresent()) {
      promolevelname = promolevelnameOpt.get();
    } else {
      // promolevelnameOpt contains null
    }
    

    【讨论】:

      【解决方案2】:

      findFirst 返回 Optional 但如果没有值,它将抛出 NoSuchElementException。所以你需要检查是否存在值。

      Optional<String> value = obj.getOptional()
      if (value.isPresent()) {
          value.get();
      }
      

      在您的情况下,它应该如下所示:

      Optional<String> optionalValue = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst();
      if (optionalValue .isPresent()) {
          String promolevelname  = optionalValue.get();
      }
      

      【讨论】:

        【解决方案3】:

        你可以使用.orElse(null)代替.get()

        所以你的代码变成了:

        String promolevelname = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().orElse(null);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-09
          • 2018-09-13
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 2013-09-07
          • 2016-01-03
          • 1970-01-01
          相关资源
          最近更新 更多