java8根据某个id删选_Java 8可选:如何使用它
java8根據某個id刪選
Java 8帶有新的Optional類型,類似于其他語言中可用的類型。 這篇文章將介紹這種新類型的使用方式,即主要用途。
什么是可選類型?
可選的是新容器類型,如果有可用值,則該容器類型將包裝單個值。 因此,這意味著要傳達可能缺少該值的含義。 以這種方法為例:
返回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
java8根據某個id刪選
總結
以上是生活随笔為你收集整理的java8根据某个id删选_Java 8可选:如何使用它的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旗鱼系统支持哪些手机(旗鱼系统的手机)
- 下一篇: 电脑小白如何选购笔记本如何选购电脑笔记本