假設有一個業務 serviceA,一個 通用的 方法 commonService
編程
function serviceA(){
obj = commonService(); # 內部報異常,捕獲異常後 返回默認值,此處爲null
....
heavyFunction() # 可能的慢速調用
....
otherService.doSomthing(obj) # 函數體內調用 obj的方法,屬性將致使空指針異常
}
commonService 內部捕獲異常的壞處
1. 代碼編程原則是儘早暴露錯誤,這樣當程序異常時能夠找到異常的原始緣由。
將異常點延遲到 otherService.doSomthing 函數內部,這樣程序異常終止時,在 "異常點" 將查不到 root cause,由於此處 異常是空指針異常,commonService內部代碼形成的異常將沒法查看了
2. 異常延後的後果是本該結束的程序,又多執行了一些時間,若是後面有慢速調用,則大大增長了程序執行時間
3. commonService 異常時返回默認值或默認處理,在當前的業務 serviceA中可能此默認處理是正確的,而其餘業務serviceB,serviceC
可能有不一樣的處理,這樣 commonService的通用性就削弱了。函數