2013-01-17 36 views
1

做一些你知道會拋出異常的錯誤形式(假設你正確處理它)?例如:故意拋出異常是不是很糟糕?

JSONArray stuff = new JSONArray(); 
JSONArray otherStuff = new JSONArray(); 
try{ 
    for(i = 0; i < stuff.length(); i++){ 
     JSONObject a = stuff.getJSONObject(i); 
     otherStuff.add(a);   
     } 
} catch (JSONException e){ 
    Log.e("FAIL", e.toString()); 
} 

//more code adding things to array later on 

在這種情況下,你第一次運行的順序排列將是空的,getJSONObject將拋出一個錯誤時拋出,因爲就什麼也沒有索引i。但是,稍後如果將事件添加到數組中,則不會拋出異常。

授予此代碼只是一個假設(我敢肯定有更好的例子 - 有人可能有一個),但作爲一種形式/風格的問題可以故意拋出異常嗎?或者你應該避免把它們扔在一起?

+0

這是確定的,但通常你不應該。這[文章](http://stackoverflow.com/questions/9314358/design-issue-to-what-extent-should-I-rely-on-exceptions-for-the-the-of-the-flow) – wtsang02

+0

我不同意它沒問題,但同意這個問題post –

+0

當前的示例不會拋出,因爲stuff.length()== 0,所以不會進入循環。也就是說,只是日誌記錄通常不是正確的異常處理,或者是有效的,並且應該正常處理,或者它不是,你應該做的不僅僅是忽略它。 – jqpubliq

回答

3

根據我的經驗,通常認爲使用異常作爲流量控制是不好的做法。它們應該保留用於特殊情況。

+2

人們可以說,例外情況僅限於特殊情況(壞玩笑) – Rarw

+0

是的這就是爲什麼我選擇了例外這個詞,我只是讓它稍微低估:) – digitaljoel

1

在我看來,如果異常只是在特殊情況下拋出,而不是像常規方式那樣。退出循環。

但請注意:創建,拋出異常並不是很快。

=>如果可能的話(而不是太複雜,我會強烈建議不要使用異常。

相關問題