java8根据某个id删选_Java 8可选:如何使用它
java8根據(jù)某個(gè)id刪選
Java 8帶有新的Optional類型,類似于其他語(yǔ)言中可用的類型。 這篇文章將介紹這種新類型的使用方式,即主要用途。
什么是可選類型?
可選的是新容器類型,如果有可用值,則該容器類型將包裝單個(gè)值。 因此,這意味著要傳達(dá)可能缺少該值的含義。 以這種方法為例:
返回Optional顯式增加了該給定的社會(huì)保險(xiǎn)號(hào)可能沒有客戶的可能性。
這意味著類型系統(tǒng)明確地迫使方法的調(diào)用者考慮并處理可能沒有使用該SSN的客戶的可能性。
呼叫者將必須執(zhí)行以下操作:
Optional<Customer> optional = findCustomerWithSSN(ssn);if (optional.isPresent()) {Customer customer = maybeCustomer.get();... use customer ... } else {... deal with absence case ... }否則,請(qǐng)?zhí)峁┠J(rèn)值:
Long value = findOptionalLong(ssn).orElse(0L);可選的用法有點(diǎn)類似于拋出檢查異常的更熟悉的情況。 通過拋出一個(gè)已檢查的異常,我們使用編譯器來(lái)強(qiáng)制API的調(diào)用者以某種方式處理異常情況。
可選試圖解決什么?
可選的方法是嘗試通過增加構(gòu)建更具表現(xiàn)力的API的可能性來(lái)減少Java系統(tǒng)中空指針異常的數(shù)量,這些API解釋了有時(shí)缺少返回值的可能性。
如果從一開始就存在Optional,那么大多數(shù)庫(kù)和應(yīng)用程序可能會(huì)更好地處理缺少的返回值,從而減少了空指針異常的數(shù)量以及總體上的錯(cuò)誤總數(shù)。
那么應(yīng)該如何使用Optional?
可選應(yīng)該用作可能不返回值的函數(shù)的返回類型 。
這是來(lái)自O(shè)penJDK郵件列表的報(bào)價(jià) :
“ JSR-335 EG相當(dāng)強(qiáng)烈地認(rèn)為,“可選”的使用不應(yīng)超過僅支持“可選-返回”慣用語(yǔ)所需要的數(shù)量。
有人建議甚至將其重命名為OptionalReturn”
在域驅(qū)動(dòng)程序開發(fā)的上下文中,這意味著Optional應(yīng)該用作某些服務(wù),存儲(chǔ)庫(kù)或?qū)嵱贸绦蚍椒ǖ姆祷仡愋?#xff0c;例如上面顯示的方法。
什么是可選的,不嘗試解決
可選并不意味著是一種避免所有類型的空指針的機(jī)制。 例如,仍然必須測(cè)試方法和構(gòu)造函數(shù)的強(qiáng)制輸入?yún)?shù)。
與使用null時(shí)一樣,Optional不能幫助傳達(dá)缺失值的含義 。 以類似的方式,null可能意味著很多不同的東西(找不到值等),因此缺少Optional值也可以。
該方法的調(diào)用者仍然必須檢查該方法的javadoc以了解缺少的Optional的含義,以便對(duì)其進(jìn)行正確處理。
同樣,可以將被檢查的異常捕獲在一個(gè)空塊中,這也沒有類似的方法阻止調(diào)用方調(diào)用get()并繼續(xù)前進(jìn)。
僅返回null有什么問題?
問題在于該函數(shù)的調(diào)用者可能沒有閱讀該方法的javadoc,而忘記了處理null的情況。
這經(jīng)常發(fā)生,并且是空指針異常的主要原因之一,盡管不是唯一的原因。
如何不使用可選?
可選不打算在這些情況下使用,因?yàn)樗粫?huì)給我們帶來(lái)任何好處:
- 在域模型層(不可序列化)
- 在DTO中(相同原因)
- 在方法的輸入?yún)?shù)中
- 在構(gòu)造函數(shù)參數(shù)中
Optional對(duì)函數(shù)式編程有何幫助?
在鏈接的函數(shù)調(diào)用中,Optional提供了ifPresent()方法,該方法允許鏈接可能不返回值的函數(shù):
findCustomerWithSSN(ssn).ifPresent(() -> System.out.println("customer exists!"));有用的鏈接
Oracle的這篇博客文章進(jìn)一步介紹了Optional及其用法,并將其與其他語(yǔ)言的類似功能進(jìn)行了比較– 厭倦了Null指針異常?
該備忘單提供了Optional – Java 8 Cheat Sheet中的Optional的全面概述。
翻譯自: https://www.javacodegeeks.com/2014/06/java-8-optional-how-to-use-it.html
java8根據(jù)某個(gè)id刪選
總結(jié)
以上是生活随笔為你收集整理的java8根据某个id删选_Java 8可选:如何使用它的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旗鱼系统支持哪些手机(旗鱼系统的手机)
- 下一篇: 电脑小白如何选购笔记本如何选购电脑笔记本