Java中空值处理的感受
為什么80%的碼農都做不了架構師?>>> ??
空值非常麻煩,Java中的空指針異常讓人崩潰,Java程序中還是遍布null檢查。
** null是一個討厭鬼 **
null語義不明,通常null什么都不能代表,而又什么都能代表。如果你不檢查,空指針異常必定會蹦出來。
對于集合類型來說,空有兩種含意:
1、變量是空引用,也就是變量沒指向一個集合類型。
2、集合中元素數量為0。
所以經常我們要檢查 list != null && list.size() > 0
對于空值最常用的辦法就是:不相信任何輸入輸出值,每個一參數都需要檢查。
這樣可以解決問題,但是出現另一個棘手的事情:
- 增加代碼長度
大部分代碼都是在檢查空值上面;一個方法100行代碼,有50行是檢查各種參數,49進行異常處理,1行調用方法進行業務處理。這是什么事兒啊。
- 減少寫代碼的樂趣
注意力集中的時間段是非常保貴的。現在的互聯網公司,辦公區開放、各部分門的混坐一起,一個程序員從早到晚不停的被打擾,8小時工作時間能集中精力2個小時已經很不容易了。而這短短的有效時間內,還要編寫大量的防御性代碼,對于我來說,大量編寫這樣的代碼經常會讓我思路分散,導致我在真正的業務代碼上面出錯。
** 這個問題怎么破?**
實話是很難破,多年編碼后也僅僅總結了幾個做法可以減輕空值帶來的痛苦
- 所有返回的集合對象都不返回null,而是返回size=0的空集合
- 除非null有特殊含意,方法返回的普通對象都不為null
如從數據庫查找對象的方法:findById,這個返回null表示沒有這個對象,可以返回null
- 使用基本的值類型,而不使用包裝過的類型
使用int double 等等,不使用Integer
- 免不了有null時,使用guava中的Optional對象
可以方便的檢查和操作null,JDK8以后也在java.util包中增加了Optional對象。
- 集合對象中不保存null
Map中不保存value為null的K-V對兒,也不用null做key。
- 使用高效工具對入參為null進行檢查
如Guava中的Preconditions類這樣的檢查工具,大大減少代碼量。
以上只是自己在寫程序過程中的一些感受,如果有同行朋友有建議,請留言,謝謝!
轉載于:https://my.oschina.net/gccr/blog/495862
總結
以上是生活随笔為你收集整理的Java中空值处理的感受的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer错误:过程 sp_ad
- 下一篇: MySQL EXPLAIN Extra列