从Java应用程序中消除Null指针异常
這篇文章簡(jiǎn)要介紹了Java 8的最有用但“毫不費(fèi)力”的功能。
程序員花了無(wú)盡的時(shí)間來(lái)嘗試糾正最常見(jiàn)但最危險(xiǎn)的錯(cuò)誤之一-空指針異常。
空指針異常可能導(dǎo)致我們的應(yīng)用程序意外中斷,并且很難預(yù)先檢測(cè)到。
在許多情況下,當(dāng)我們使用外部庫(kù)和API時(shí),由于庫(kù)/ API返回的值,空指針可能會(huì)出現(xiàn)。
由于這個(gè)原因,異常處理和從異常中進(jìn)行邏輯恢復(fù)對(duì)于程序員來(lái)說(shuō)是一項(xiàng)復(fù)雜的任務(wù)。
這需要高級(jí)程序員來(lái)檢查代碼,并定義控制流以進(jìn)行錯(cuò)誤恢復(fù)。
在Java 8中,添加了新的API –即“ Optional ”類(lèi),以幫助開(kāi)發(fā)人員創(chuàng)建一個(gè)框架,以完全避免使用空指針,并為其應(yīng)用程序定義第一級(jí)異常恢復(fù)策略。
明確地說(shuō)–
Optional API提供了一個(gè)容器類(lèi),該容器類(lèi)可用于包裝方法調(diào)用的返回值-即使它們包含“空”值。
它還提供了API,使程序員能夠定義默認(rèn)值,以便在遇到“ null”時(shí)返回。 這迫使開(kāi)發(fā)人員在編碼時(shí)考慮針對(duì)空值的緩解策略。
空檢查可以通過(guò)兩種方式執(zhí)行–通過(guò)“ isPresent”和“ ifPresent”方法。
當(dāng)我們調(diào)用“ isPresent ”時(shí),如果存在非null值,則將返回“ true”。
另一方面,除了只檢查該值是否為非null之外,如果我們希望將控制流委托給同一API調(diào)用中的另一個(gè)類(lèi),則可以使用“ ifPresent”方法。
此方法采用類(lèi)型為“ Consumer ”的參數(shù)-本質(zhì)上是一個(gè)功能接口。 可以通過(guò)應(yīng)用程序中的類(lèi)來(lái)實(shí)現(xiàn)此接口。
每當(dāng)調(diào)用“ ifPresent ”時(shí),我們都必須傳遞Consumer接口的實(shí)現(xiàn),以便可以自動(dòng)完成控制流委派。
從開(kāi)發(fā)人員的角度來(lái)看–消費(fèi)者的實(shí)現(xiàn)可以定義當(dāng)存在非null值時(shí)要采取的措施。
此類(lèi)還具有其他有用的功能,程序員可以使用這些功能來(lái)避免樣板代碼。
過(guò)濾器函數(shù)接受Predicate類(lèi)型的參數(shù)。 如果返回值與謂詞匹配,則返回過(guò)濾后的值,否則返回空的Optional對(duì)象。
在相似的行上,我們還有其他函數(shù)可以調(diào)用以組織返回值。 考慮地圖功能和平面 地圖功能。
這兩個(gè)函數(shù)均用于為返回值(如果存在)創(chuàng)建鍵-值對(duì)映射。
開(kāi)發(fā)人員還可以根據(jù)邏輯標(biāo)準(zhǔn)的評(píng)估來(lái)定義返回值。
例如,考慮以下功能–
如果返回值為null,則orElse函數(shù)將在參數(shù)中返回提供的值
orElseGet返回值(如果存在)。 否則,如果不存在,它將調(diào)用Supplier類(lèi)型的參數(shù)以返回自定義值。
orElseThrow啟用對(duì)異常處理的細(xì)粒度控制。 如果沒(méi)有返回值,則可以引發(fā)自定義異常,或者可以將控制的飛行委托給Supplier類(lèi)型-這又可以決定要拋出的異常。
總之,使用此API –我們可以在整個(gè)軟件開(kāi)發(fā)生命周期中受益
軟件架構(gòu)師可以通過(guò)標(biāo)準(zhǔn)化異常處理來(lái)減少代碼審查周期。
質(zhì)量檢查工程師可以報(bào)??告較少的由空指針異常引起的錯(cuò)誤。
軟件設(shè)計(jì)人員可以預(yù)先考慮其異常處理邏輯,避免以后再進(jìn)行愚蠢的修補(bǔ)。
開(kāi)發(fā)人員最終將編寫(xiě)更有效的代碼,從而縮短產(chǎn)品上市時(shí)間。
翻譯自: https://www.javacodegeeks.com/2019/04/eliminating-pointer-exceptions-java-applications.html
總結(jié)
以上是生活随笔為你收集整理的从Java应用程序中消除Null指针异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 固执己见的框架(例如Spring Boo
- 下一篇: javase获取项目根目录_JavaSE