try的代碼必須是一個原子整體,不要什麼東西都往try裏邊塞

try的代碼必須是一個原子整體,只是爲了完成一個功能,不要什麼東西都往try裏邊塞。
還是以例子說明吧,下邊一個例子是檢查兩個標誌位,本來這兩個標誌位沒什麼相關性,但因爲被綁在了一起就產生了一些笑話。在一次真實的運行中,第一個isPass()出了異常,結果導致了接下去的語句沒有執行,輸出的結果成了兩個“unknow”,而實際上第二個sPass()若能執行,它的結果會是pass。

                    String[] subs = null;
                    try {
                         cdmaFtResult = cdmaBtResult = getResources().getString(
                                   R.string.unknow);
                         subs = result.split(",");
                        
                         cdmaBtResult = isPass(subs[2]);
                         cdmaFtResult = isPass(subs[3]);
                    } catch (Exception e) {
                         Log.e(TAG,
                                   "failed to get cdma BT & FT result:\n"
                                             + e.toString());
                    }

後來,我把這段try分成了兩個,分別針對cdmaBtResult = isPass(subs[2]);和cdmaFtResult = isPass(subs[3]);兩條語句,並將日誌信息分別寫成了
"failed to get cdma BT result:\n" + e.toString());
"failed to get cdma FT result:\n" + e.toString());
這樣子就清晰多了,運行時也不會再相互干擾了。

其實,早有前輩高人警告過:try的目標應該儘可能明確,因爲一旦出了異常,錯誤的信息也比較明確並且好定位。不過似乎非得自己去中過招,以後纔會將這些規則不折不扣地執行下去。ok, you win.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章