【问题标题】: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);