3 回答
TA贡献2065条经验 获得超13个赞
使用Optional和throw定制自定义的更精确版本Exception应为:
public A save(A a) throws ANotValidException { // throws the custom exception
return Optional.ofNullable(a) // since your predicate is to check for not null
.map(aRepository::save)
.orElseThrow(() -> new ANotValidException(a + "A is not valid"));
}
TA贡献1784条经验 获得超8个赞
有人可能会争辩说,以相反的顺序阅读它会更自然,即首先处理验证及其结果,然后继续保存对象。
public A save(A a) {
if (!isValid.test(a)) {
throw new ANotValidException("A is not valid");
}
return aRepository.save(a);
}
TA贡献1820条经验 获得超10个赞
AnOptional可以使代码更具可读性,尤其是在使用谓词对象时:
public A save(A a) {
return Optional.ofNullable(a)
.filter(isValid)
.map(aRepository::save)
.orElseThrow(() -> new ANotValidException("A is not valid"));
}
您也可以完全摆脱谓词,因为它使用起来很简单Objects::nonNull(除非您的真实谓词测试更复杂)。在这种情况下,保持您当前的状况检查可能更有意义(在我看来)。
添加回答
举报