3 回答
TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
使用Optional和throw定制自定義的更精確版本Exception應(yīng)為:
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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
有人可能會(huì)爭(zhēng)辯說(shuō),以相反的順序閱讀它會(huì)更自然,即首先處理驗(yàn)證及其結(jié)果,然后繼續(xù)保存對(duì)象。
public A save(A a) {
if (!isValid.test(a)) {
throw new ANotValidException("A is not valid");
}
return aRepository.save(a);
}
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
AnOptional可以使代碼更具可讀性,尤其是在使用謂詞對(duì)象時(shí):
public A save(A a) {
return Optional.ofNullable(a)
.filter(isValid)
.map(aRepository::save)
.orElseThrow(() -> new ANotValidException("A is not valid"));
}
您也可以完全擺脫謂詞,因?yàn)樗褂闷饋?lái)很簡(jiǎn)單Objects::nonNull(除非您的真實(shí)謂詞測(cè)試更復(fù)雜)。在這種情況下,保持您當(dāng)前的狀況檢查可能更有意義(在我看來(lái))。
添加回答
舉報(bào)
