我有一个方法findUrl()
,它将User
和Permission
作为参数并查询数据库并实现一些逻辑来查找此用户
可以访问的URL,以逗号分隔的字符串形式。
我想开发该方法的空安全版本,采用相同的方法
User
和 Permission
作为参数,然后返回一个 Optional
,这将是
如果传递给它的至少一个值为空,则为空,或者 findUrl
方法返回 null
。我编写了下面的代码,但它似乎是基于空检查的实现,并且我没有看到使用Optional使代码更简洁的好处。
public Optional<String> nullSafeFindUrl(User user, Permissions permissions) {
if ((Optional.ofNullable(user)).isPresent() && (Optional.ofNullable(permissions)).isPresent()) {
return Optional.ofNullable(findUrl(user.get(), permissions.get()));
} else {
return Optional.empty();
}
}
有没有更好的方法来使代码更具可读性?
最佳答案
您需要的是一次性绘制平面 map 和 map 。
return user.flatMap(u -> permissions.map(perm -> findUrl(u, perm));
这将返回一个空的可选值或一个带有返回值的可选值(如果两者都有效)
关于java - 如何使用 Java 8 可选创建 Java 方法的空安全版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417990/