3 回答

TA貢獻2065條經(jīng)驗 獲得超14個贊
使用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貢獻1784條經(jīng)驗 獲得超8個贊
有人可能會爭辯說,以相反的順序閱讀它會更自然,即首先處理驗證及其結(jié)果,然后繼續(xù)保存對象。
public A save(A a) {
if (!isValid.test(a)) {
throw new ANotValidException("A is not valid");
}
return aRepository.save(a);
}

TA貢獻1820條經(jīng)驗 獲得超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(除非您的真實謂詞測試更復(fù)雜)。在這種情況下,保持您當前的狀況檢查可能更有意義(在我看來)。
添加回答
舉報