【发布时间】:2022-01-19 10:22:00
【问题描述】:
我收到一个包含姓氏和名字的客户对象。在转换中,我检查两个值是否不为空,然后将它们传递给 DTO:
if (customer.getFirstName().isPresent() && customer.getLastName().isPresent()) {
final String firstName = customer.getFirstName().get();
final String lastName = customer.getLastName().get();
// do assignment
}
但我仍然收到 Sonar 消息 只能在调用 isPresent() 后访问可选值。
我在这里遗漏了什么还是误报?
【问题讨论】:
-
如果
getFirstName在您第二次调用它时返回不同的值怎么办? -
使用
ifPresent和get违背了使用Optional的目的。在这种情况下,空检查更容易阅读。 -
好点。在这种情况下,不可能返回其他东西,但我明白了。
-
Optional不应用作属性类型。请参阅stackoverflow.com/questions/23454952/uses-for-optional,它对此主题有权威的回答。 -
如果我只是传递它,那么当我必须进行空值检查或稍后再次将其打包到 Optional 中时,将其解包并没有任何好处。但这与我上面的问题无关。谢谢。