2014-04-24 23 views
2

我一直在瀏覽主要的Android SDK(Facebook,Google +,甚至Android)。我注意到的是異常似乎從未包含在方法簽名中。相反,我看到的是異常被拋出,但通常只在文檔中列出(如果你幸運的話)。爲什麼沒有將特例添加到簽名中?

這種做法是怎麼回事?是否有一些宣言在方法簽名中聲明異常邪惡?

實例: 從android.database.AbstractCursor

空隙checkPosition()

此函數拋出 CursorIndexOutOfBoundsException如果光標位置超出 邊界。

爲什麼這不

void checkPosition() throws CursorIndexOutOfBoundsException 

我更喜歡後者,因爲你可以設置你的IDE /編譯器實際上是警告你,而不是隻是祈禱該文檔提到什麼是實際上可以拋出的字節碼。

+1

在java世界中,關於是否使用checked或unchecked exceptions有很多不同意見。歡迎參加辯論。 :p見http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation – azurefrog

+2

這不是這個問題,其實主要是基於意見? –

+0

@dystroy部分。這取決於OP是否知道RuntimeExceptions不需要聲明,而不是檢查異常。如果是,那麼他是在詢問我們是否聲明RuntimeExceptions的意見。 – Joffrey

回答

6

這是因爲CursorIndexOutOfBoundsException是一個RuntimeException。這不是檢查的異常。

http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html

+0

這就是爲什麼你有選擇包括它,而不是爲什麼它應該或不應該在那裏。 – Joffrey

+0

聲明拋出的RuntimeException類型不是標準做法。他們是非常特殊的,你應該防守性地編寫代碼來保護他們免受他們的侵害。正如@azurefrog所說,「歡迎參加辯論」。 – jgitter

+0

對於這對你來說這很有價值,我傾向於更喜歡檢查異常。 :-) – jgitter

1

在您的精確例子,這就是信息。

這個異常只能在調用代碼中出現嚴重錯誤時拋出,所以沒有必要爲該運行時異常編寫一個try/catch,這在生產中不會發生,並且沒有必要混淆簽名。

+0

在簽名中聲明它並不會使它成爲檢查的異常,是嗎? – Joffrey

+0

@Joffrey這是正確的,有些開發人員將方法簽名中的運行時異常作爲文檔記錄的一種方式,即使該方法的用戶不需要實際嘗試/捕獲它。 – azurefrog

+0

@azurefrog這就是我在說的。我是那些開發人員之一;)使用檢查或運行時異常是另一場辯論。 – Joffrey

相關問題