瓜娃系列 (7) - 外面不少壞銀地

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

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

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

一個好編程習慣是儘可能不要用null, 除非特殊狀況, 參數都不容許是null. 而那些特殊的須要null的場合, 用 @Nullable標註出來.

通常狀況下, 若是你立刻就會調用girl.kiss(), 這個girl若是是null的話, 你立刻就能即時獲得一個NullPointerException, jvm已經幫你作了null檢查. 可是有時候, 好比對構造函數來講, 參數不是立刻使用, 而是存在成員變量裏面, 之後再用. 這時候檢查就很重要了. 不然, 若是客戶不當心傳遞一個null, 錯誤就要延後到可能好久之後纔會發現了.

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


可是這有點繁瑣, 瓜娃有一個工具, 叫 Preconditions.

用它, 上面的代碼能夠簡化成:
Preconditions.checkNotNull(girl, "誰這麼缺德, 給我一個山寨美眉呀?!");
Preconditions還有兩個經常使用的檢查: checkArgument()和checkState(). 用法大同小異. 一個用來檢查參數, 一個用來檢查對象狀態. 一個拋IllegalArgumentException, 一個拋IllegalStateException. Preconditions這些工具函數有一個潛在的問題: 當你寫測試同時用測試覆蓋工具的時候, 若是你用傳統的if-else, 測試覆蓋工具會告訴你若是你忘記了測試那個錯誤狀況. 而用了Preconditions, 這些工具就被騙了, 只會傻乎乎地報告100%覆蓋.
相關文章
相關標籤/搜索