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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 8可选:如何使用它

發布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8可选:如何使用它 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 8帶有新的Optional類型,類似于其他語言中提供的類型。 這篇文章將介紹這種新類型的使用方式,即主要用途。

什么是可選類型?

可選的是新容器類型,如果有可用值,則該容器類型將包裝單個值。 因此,其含義是傳達可能不存在該值的含義。 以這種方法為例:

public Optional<Customer> findCustomerWithSSN(String ssn) {... }

返回Optional顯式增加了該給定的社會保險號可能沒有客戶的可能性。

這意味著類型系統明確地迫使該方法的調用者考慮并處理可能沒有使用該SSN的客戶的可能性。

呼叫者將必須執行以下操作:

Optional<Customer> optional = findCustomerWithSSN(ssn);if (optional.isPresent()) {Customer customer = maybeCustomer.get();... use customer ... } else {... deal with absence case ... }

否則,請提供默認值:

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

可選的用法有點類似于拋出檢查異常的更熟悉的情況。 通過拋出一個已檢查的異常,我們使用編譯器來強制API的調用者以某種方式處理異常情況。

可選試圖解決什么?

可選的方法是嘗試通過增加構建更具表現力的API的可能性來減少Java系統中空指針異常的數量,這些API解釋了有時缺少返回值的可能性。

如果從一開始就存在Optional,那么大多數庫和應用程序可能會更好地處理缺少的返回值,從而減少了空指針異常的數量以及總體上的錯誤總數。

那么應該如何使用Optional?

可選應該用作可能不返回值的函數的返回類型

這是來自OpenJDK郵件列表的報價 :

“ JSR-335 EG相當強烈地認為,“可選”的使用不應超過僅支持“可選-返回”慣用語所需的內容。

有人建議甚至將其重命名為OptionalReturn”

在域驅動程序開發的上下文中,這意味著Optional應該用作某些服務,存儲庫或實用程序方法的返回類型,例如上面顯示的方法。

什么是可選的,不嘗試解決

可選并不意味著是一種避免所有類型的空指針的機制。 例如,仍然必須測試方法和構造函數的強制輸入參數。

像使用null時一樣,Optional不能幫助傳達缺失值的含義 。 以類似的方式,null可能意味著許多不同的東西(找不到值等),因此缺少Optional值也可以。

該方法的調用者仍然必須檢查該方法的javadoc以了解缺少Optional的含義,以便正確處理它。

同樣,可以將被檢查的異常捕獲到一個空塊中,這也沒有阻止調用方調用get()并繼續前進的方式。

僅返回null有什么問題?

問題在于該函數的調用者可能沒有閱讀該方法的javadoc,而忘記了處理null的情況。

這經常發生,并且是空指針異常的主要原因之一,盡管不是唯一的原因。

如何不使用可選?

可選不打算在這些情況下使用,因為它不會給我們帶來任何好處:

  • 在域模型層中(不可序列化)
  • 在DTO中(相同原因)
  • 在方法的輸入參數中
  • 在構造函數參數中

Optional對函數式編程有何幫助?

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

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

有用的鏈接

Oracle的這篇博客文章進一步介紹了Optional及其用法,并將其與其他語言的類似功能進行了比較– 厭倦了Null指針異常?

該備忘單提供了Optional – Java 8 Cheat Sheet中的Optional的全面概述。

翻譯自: https://www.javacodegeeks.com/2014/06/java-8-optional-how-to-use-it.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Java 8可选:如何使用它的全部內容,希望文章能夠幫你解決所遇到的問題。

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