根据javadoc,Optional.map()返回一个Optional。
在以下代码段中:
public String getName(Long tpUserId) {
Optional<TpUser> selectedTpUser = tpUserRepo.findById(tpUserId);
return selectedTpUser.map(user -> user.getFirstName() + " " + user.getSurName())
.orElseThrow(() -> new IllegalArgumentException("No user found for this id"));
}
看起来,我想返回一个String,但得到一个Optional。但是,没有编译错误。为什么?
答案 0 :(得分:3)
您完全正确。 map()
方法返回Optional,我为您使用javadoc表示赞赏。此处的区别在于,您然后在orElseThrow()
返回的那个Optional 上调用map()
方法。如果在orElseThrow()
中引用javadoc,则会看到它返回“ [Optional]的当前值”。在这种情况下,这是一个字符串。
答案 1 :(得分:1)
整个操作链返回一个String
:
map(...)
)将Optional<User>
映射到Optional<String>
。orElseThrow(...)
)打开Optional<String>
的包装,从而返回String
(如果为空,则抛出IllegalArgumentException
)。您可以找到Optional::map
here的源代码。