瓜娃系列 (7) - 外面很多壞銀地

爲人父母, 一個比較糾結的事情, 就是到底怎麼保護那個啥也不懂的小傢伙. 如果護着她太緊了, 會不會讓她失去和外部接觸, 學習的機會, 變得孤僻, 依賴性強? 如果保護不利, 被人欺負了, 或者甚至被拐跑了, 後悔藥沒地方買呀. 到底要不要告訴她外面有很多壞人吶?

唉. 不自尋煩惱了. 埋頭寫代碼!

不過, 嗯, 這個好像我寫代碼怎麼也在想着類似的東西? "要不要檢查這個參數是不是null?", "要不要判斷當前狀態對不對?"

一個好編程習慣是儘量不要用null, 除非特殊情況, 參數都不允許是null. 而那些特殊的需要null的場合, 用[url=http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html]@Nullable[/url]標註出來.

一般情況下, 如果你馬上就會調用girl.kiss(), 這個girl如果是null的話, 你馬上就能即時得到一個NullPointerException, jvm已經幫你做了null檢查. 但是有時候, 比如對構造函數來說, 參數不是馬上使用, 而是存在成員變量裏面, 以後再用. 這時候檢查就很重要了. 否則, 如果客戶不小心傳遞一個null, 錯誤就要延後到可能很久以後纔會發現了.

最直觀的檢查就是:
[code]
if (girl == null) {
throw new NullPointerException("誰這麼缺德, 給我一個山寨美眉呀?!");
}
[/code]

但是這有點繁瑣, 瓜娃有一個工具, 叫[url=http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/base/Preconditions.html]Preconditions[/url].

用它, 上面的代碼可以簡化成:
[code]
Preconditions.checkNotNull(girl, "誰這麼缺德, 給我一個山寨美眉呀?!");
[/code]

Preconditions還有兩個常用的檢查: checkArgument()和checkState(). 用法大同小異. 一個用來檢查參數, 一個用來檢查對象狀態. 一個拋IllegalArgumentException, 一個拋IllegalStateException.

Preconditions這些工具函數有一個潛在的問題: 當你寫測試同時用測試覆蓋工具的時候, 如果你用傳統的if-else, 測試覆蓋工具會告訴你如果你忘記了測試那個錯誤情況. 而用了Preconditions, 這些工具就被騙了, 只會傻乎乎地報告100%覆蓋.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章