gpt4 book ai didi

java - 发生异常时,可选的 orElse() 无法返回替代值

转载 作者:行者123 更新时间:2023-12-05 09:27:19 25 4
gpt4 key购买 nike

我正在使用此逻辑并尝试在未找到员工时返回 new Employee()

但是,当 request.getId()null 时,它会抛出异常,我正在等待它执行 orElse() 部分.然而,事实并非如此。那么,我应该使用另一种可选方法吗? orElseGet() 还是 ifPresentOrElse()

我怎样才能巧妙地解决这个问题?

Employee employee = employeeRepository.findById(request.getId())
.orElse(new Employee());

更新: 如果使用 Optional 不是一个好主意,我考虑使用以下方法:

Employee employee = new Employee();
if (id != null) {
employee = employeeRepository.findById(id)
.orElse(new Employee());
}

有什么想法吗?

最佳答案

如评论中所述,Optional 在这种情况下不执行任何操作。要解决它,您需要自己处理 null 值。您可以通过让 request.getId() 自己返回一个 Optional 来做到这一点(因为它可以是 null)。

现在您可以使用 flatMap() 运算符链接这些 Optional

public class MyRequestClass {
private Long id;

// Change your getter to this, or make a new one, eg. 'getOptionalId()'
public Optional<Long> getId() {
return Optional.ofNullable(id);
}
}

现在您可以将代码重构为:

Employee employee = request
.getId()
.flatMap(employeeRepository::findById) // Using flatMap() in stead of map()
.orElseGet(Employee::new); // I changed this part so that new Employee() is
// called lazily when no Employee was found in
// the database (or when the request has no ID)

关于java - 发生异常时,可选的 orElse() 无法返回替代值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72626469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com