Java可选isPresent检查三元表达式

时间:2018-04-03 11:29:44

标签: java sonarqube optional

我想知道为什么Sonarqube给了我一个

Call "user.isPresent()" before accessing the value.

警告此声明:

String name = user.isPresent() ? "<default>" : user.get().getName();

这是Sonarqube验证器中的错误,还是我错过了什么?

2 个答案:

答案 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。