我想知道为什么Sonarqube给了我一个
Call "user.isPresent()" before accessing the value.
警告此声明:
String name = user.isPresent() ? "<default>" : user.get().getName();
这是Sonarqube验证器中的错误,还是我错过了什么?
答案 0 :(得分:3)
看起来你的三元组可能有问题。你能试试这个:
String name = !user.isPresent() ? "<default>" : user.get().getName();
答案 1 :(得分:2)
String name = user.isPresent() ? "<default>" : user.get().getName();
错误是因为当不存在时,您应该返回默认值。
另一方面,isPresent
不应用于此类目的。可选的具有处理此类用例的方法。你可以使用例如:
String name = user.map(User::getName).orElse(defaultName);
如果地图是用户isPresent
替换用户姓名的方法。
isPresent
应该用于过滤或断言,而不是替换以下代码块:
if (val == null) {
//do sth
} else {
//do sth else
}
我强烈推荐this文章,其中很好地介绍了Optional。