簡體   English   中英

如果存在 Optional<> 值,則拋出異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM