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