日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2024/10/12 java 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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: 如何正确使用?的全部內容,希望文章能夠幫你解決所遇到的問題。

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