簡體   English   中英

如何執行空檢查是否為空可選

[英]How to performe a null-check for an empty Optional

我目前正在使用某些存儲庫功能,例如.findById() 現在,我想檢查是否為請求的ID返回了條目。 我目前正在通過執行null -check來執行此操作。

Optional<Entry> entryOptional = entryRepository.findById(id);

if (entryOptional != null) {
  // do sth. ...
}

.findById()文檔說,該函數將...

返回具有給定id的實體;如果找不到,則返回Optional#empty()

那么我當前使用null-check實現null-check按預期工作? 還是我必須檢查以下內容:

if (!entryOptional.isEmpty()) {
  // do sth. ...
}

檢查optional是否為null本質上是錯誤的。

通過引入空性的概念創建可選項,以消除對空檢查的需求。

本質上,可選是值的包裝,它可以具有兩個狀態。 有值或為空。 這是通過使用Optional#isPresent 您可以在此處的相關文檔中查看更多信息

這實際上是以下內容:

public boolean isPresent() {
    return value != null;
}

一個很好實現的方法(如您在上面提到的那樣)將返回帶有值的可選或空的Optional(如文檔中所述)。

可選選項提供了大量的方法,您可以對它們進行操作,而無需進行空度檢查。

例如,在您的代碼中,您可以:

entryRepository.findById(id).ifPresent(() -> {
   //some operation
});

它基本接受使用者並在可選值不為null的情況下執行它。

或者,您可以使用映射功能等。

我建議您仔細閱讀文檔。

那么我當前使用null檢查的實現是否按預期工作?

否。就像方法所說的那樣,它返回實體,或Optional.empty 它不會返回null

您的第二個版本是正確的。

創建Optional s可以刪除對該字段的null檢查,並對該字段進行操作,而不必關心它是否為空。

您可以在最后檢查Optional.isPresent()是否包含任何值。

是的,您的第二種方法是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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