記錄一個NPE問題


昨天在做公司項目時,我在一處地方加了一個邏輯校驗,之后測了下發現在方法調用深處有一處NPE,來源於另一個同事的代碼。

其實NPE本應該是個Java編程中老掉牙的問題,但我覺得這一處錯誤還是比較典型的,值得一提。

這里的CycleTypeEnum是一個枚舉類型,code是枚舉中的一個int類型。而條件表達式右邊的cycleType是Product類的一個Integer類型。

業務上保證不了cycleType一定不為null,當一個Integer與一個int比較的時候,前者會拆箱為int,這一個過程也即調用intValue()。

這個地方代碼的改法一種就是將枚舉中的int類型code改為Integer,然后在這一處代碼用equals判斷。或者將Product類中的cycleType改為int類型。

但從軟件設計本身角度來說,應當豐富Product的類型,將cycleType的類型改為CycleTypeEnum,然后在那一處代碼直接判斷枚舉是否是同一個。

我覺得這個問題最大的點在於這種Integer和int的比較在JDK5之后有了自動拆箱,很多人會忽略潛在的NPE。


免責聲明!

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



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