漫畫:全面理解java.lang.IllegalArgumentException及其可用性設計



    經過一段時間的學習與實踐,飛鳥已經可以獨力解決一些問題。小魚就讓飛鳥講述一些遇到的問題和解決過程。

 

報錯日志:

 

這個產生的原因是我覆蓋Collections.sort的Comparator方法的時候

 

Collections.sort在jdk1.7版本之后底層用的是TimSort,這個Sort類會有很嚴格的檢驗,檢驗其自反性、傳遞性、對稱性。而上面的代碼忽視了相等的情況,不滿足對稱性。

 

 

所以解決方法就是:

 

 

 

 

    IllegalArgumentException是非法參數異常,報這個異常說明傳入的參數違反了一個方法要求的某些特性。比如咱們剛才看的問題里這個Comparator類作為sort方法的參數就違反了TimSort要求的對稱性。

 

    再舉個例子:

 

這段代碼會報錯:

 

從源碼來看:

 

如果參數里出現了指定的patternChars之外的字符就會報錯。

 

    發生IllegalArgumentException基本可以認定為程序Bug。Bug是避免的,應該在測試時發現。所以最重要的措施是完善測試用例,全分支覆蓋,做好積累沉淀。

    

    如果真的在運行時發生此情況,那就要做好及時的監控報警,現場快照保存,盡量第一時間發現並解決。

 

    對內部異常咱們可以這么處理。那外部異常呢?比如使用的一個中間件,中間件有可能會版本升級出現不符合預期的情況。

 

    對於這種外部依賴,當發生問題的時候最好是不影響現有程序。方法比如啟動時加載,如果發生問題,程序根本啟動不起來。因為線上一般都不會只部署一台機器,一台機器發生問題啟動不起來一般不會影響線上服務。這時候只要快速修復問題即可。

    

    如果必須運行時調用那就要盡量弱化依賴和控制依賴。具體可參考靜兒在美團技術博客的文章《美團點評智能支付核心交易系統的可用性實踐》

 

 

靜兒的畫畫水平有點差 /(ㄒoㄒ)/~~

 

關注靜兒公眾號,不定期漫畫技術推送~

本期文章:

原文鏈接地址是:

漫畫:全面理解java.lang.IllegalArgumentException及其可用性設計

跑題時間:恭喜你,你贏了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM