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