錯誤處理很重要,但如果它搞亂了代碼邏輯簇宽,就是錯誤的做法
7.1 使用異常而非返回碼
遇到錯誤時,最好拋出一個異常吧享。使調(diào)用代碼整潔魏割,邏輯不亂。
7.2 先寫Try-Catch-Finally
編寫可能出現(xiàn)異常的代碼時钢颂,先寫try-catch-finally钞它。
7.3 使用不可控異常
使用 checked exception 違反開閉原則。所以盡量使用not checked exception
7.4 給出異常發(fā)生的環(huán)境說明
你拋出的每一個異常,都應(yīng)當(dāng)提供足夠的環(huán)境說明遭垛。(表明你該失敗操作的初衷)
7.5 依調(diào)用者需要定義異常類
調(diào)用一些第三方API時要catch的異常種類是第三方API為了自己的代碼而定義的異常類尼桶,作為調(diào)用者應(yīng)該自己打包第三方API返回的異常類型(就是重新封裝一層),以降低依賴锯仪”枚剑可以平移替換第三方API
7.6 定義常規(guī)流程
有時候拋異常的方式會打斷一些正確的業(yè)務(wù)邏輯。那么我們可以創(chuàng)建一個類或配置一個對象庶喜,用來處理特例小腊,將異常行為封裝到特例對象中。這種手法叫做特例模式溃卡。
7.7 別返回null值
返回null值就是給自己增加工作量溢豆,后續(xù)的調(diào)用代碼要做很多的null判斷,毫無意義瘸羡。而且一旦沒有做判斷就會空指針異常漩仙。所以我們應(yīng)該盡量不返回null,拋出異常犹赖、返回特例對象队他、返回Collections.emptyList()...
7.8 別傳遞null值
除非API要求你傳遞null值,否則你盡可能不傳遞null值峻村。
小結(jié)
整潔代碼是可讀的麸折,但也要強(qiáng)固≌匙颍可讀與強(qiáng)固并不沖突垢啼。如果將錯誤處理隔離看待,獨(dú)立于主要邏輯之外张肾,就能寫出強(qiáng)固而整潔的代碼芭析。做到這一步,我們就能單獨(dú)處理它吞瞪,也極大地提升了代碼的可維護(hù)性