[英]Throw exception if Optional<> value is present
假設我有一個 Spring 數據存儲庫方法。
Optional<Branch> findByName(@Nonnull final String name);
我的業務邏輯是這樣的,如果我發現這個方法執行的任何值我會拋出一個異常。
例如,我可以這樣做:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
或其他方式:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
我不確定在這種情況下使用過濾器是否合適,因為我的方法返回Optional<Branch>
而不是列表。 似乎如果在 JDK 中有 ifPresentThrow() 方法可用,這將符合我的目的。
是的,這段代碼可以寫成我不想要的命令式風格。 所以我的問題是 ifPresentThrow() 可以實現同樣的事情,或者有更好的方法來實現功能風格。 提前致謝。
你最好使用“存在”。
if (repository.existsByName(branchName)) {
throw ...
}
它更有用,因為它不會從數據庫中檢索 object,只是真/假。
您可以使用ifPresent
with block 來拋出異常
branchRepository.findByName(branch.getName()).ifPresent(s -> {
throw new NameNotAvailableException();
});
或者一個簡單的if
塊也看起來更干凈
if(branchRepository.findByName(branch.getName()).isPresent()) {
throw new NameNotAvailableException();
}
或者你可以創建一個方法來拋出一個異常
public void throwException(Object str) {
throw new NameNotAvailableException();
}
然后就調用它
branchRepository.findByName(branch.getName()).ifPresent(this::throwException);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.