【发布时间】:2018-08-28 15:07:14
【问题描述】:
我的代码中有以下内容:
Optional<Foo> optionalFoo = fooDAO.findByName(name);
Foo foo;
if(!optionalFoo.isPresent()) {
foo = fooDAO.addFoo(name);
} else {
foo = optionalFoo.get();
}
IntelliJ 弹出一个提示,上面写着can be replaced with single expression in functional style。我尝试将此块替换为:
Optional<Foo> optionalFoo = fooDAO.findByName(name);
Foo foo = optionalFoo.orElse(fooDAO.addFoo(name));
这导致测试失败,因为无论Optional 是否为空都会调用fooDAO.addFoo(name),并且如果Foo 已经存在,则不应运行addFoo 中的逻辑。
是否可以在功能上重写原始块而不调用fooDAO.addFoo(name),除非有必要?
【问题讨论】:
-
@Leviand 我相信它调用
fooDAO.addFoo(name)是为了得到它的返回值,也就是传递给orElse的返回值
标签: java optional functional-java