我的代码中有以下内容:
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));
这会导致测试失败,fooDAO.addFoo(name)
无论 是否Optional
为空,都会调用它,并且如果已经存在,addFoo
则不应运行其中的逻辑。Foo
fooDAO.addFoo(name)
除非有必要,否则是否可以在不调用的情况下重写原始块?