日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java optional 用法_Java 8中的Optional: 如何正确使用?

發布時間:2024/10/12 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java optional 用法_Java 8中的Optional: 如何正确使用? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 8中出現一個新的Optional類型,和其他語言中null的替代品類似。 本文將討論如何使用這種新類型,即它的主要用例是什么。

什么是Optional類型?

Optional是對單個對象包裝的容器類型。Optional同樣可以包裝null。舉例如下:

public Optional findCustomerWithSSN(String ssn){

...

}

復制代碼

返回值由Optional包裝了一層,語義上明確地表達了值為ssn的Customer對象是有可能不存在的。

這代表著從系統類型上明確的強制該方法調用者,考慮并處理Customer對象為null的可能性。

調用者不得不采用判斷的處理方式:

Optional optional = findCustomerWithSSN(ssn);

if (optional.isPresent()) {

Customer customer = optional.get();

... use customer ...

}

else {

... deal with absence case ...

}

復制代碼

或者提供默認值的處理方式:

public static Optional findOptionalLong(){

return Optional.empty();

}

Long value = findOptionalLong(ssn).orElse(0L);

復制代碼

這種使用Optional的方法類似于拋出異常的情況。 通過拋出一個已捕獲的異常,我們使用編譯器來強制API的調用者以某種方式處理異常情況。

Optional想解決什么問題?

Optional通過包裝一個對象,形成一個更具表現力的容器,用來減少Java系統中空指針異常的數量,Optional的API考慮了返回值丟失為null的可能性。

如果Java最開始就有Optional類,那么大多數庫和應用程序可能會更好地處理丟失的返回值,減少空指針異常的數量和錯誤總數。

Optional沒想解決什么問題?

Optional并不意味著是一種避免所有類型空指針的機制。

和null一樣,Optional無法表達缺失值具體代表什么。比如說,null可以表示許多不同的事物(未找到值,變量未初始化等),但只是看到null這個值的時候并不知道是哪種情況,Optional同理。

Optional對函數文檔的幫助有限,函數的調用者仍然需要查看函數的javadoc以理解Optional缺失值的含義,以便做出正確處理。

Optional的get()方法同樣會產生空指針異常。

只返回null有什么問題?

問題在于函數的調用者可能沒有閱讀函數的javadoc,忘記處理null。

這種情況經常發生,并且是空指針異常的主要原因之一。

Optional應該被怎樣使用?

在返回值可能為null的函數中,Optional應該用做其返回類型。

在域驅動程序開發的上下文中使用,比如說某些服務,存儲庫或實用程序方法。

Optional不應該被怎樣使用?

Optional不適合在下列場景中使用,不會有任何好處:

在域模型層(不可序列化)

在DTO中(不可序列化)

函數的輸入參數

構造函數的參數

函數式編程對Optional起到怎樣的幫助?

在鏈式函數調用中,Optional提供方法ifPresent(),它允許鏈接可能不返回值的函數:

findCustomerWithSSN(ssn).ifPresent(() -> System.out.println("customer exists!"));

復制代碼

其他相關鏈接

來自Oracle的這篇博文進一步介紹了Optional和它的用途,并將其與其他語言中的類似功能進行了比較 - Tired of Null Pointer Exceptions

總結

以上是生活随笔為你收集整理的java optional 用法_Java 8中的Optional: 如何正确使用?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。