假設我設計了一種計算arcsin
函數的方法。當然,只有閉區間[-1,1]中的數字纔可以作爲函數的參數。同時使用兩種或多種異常類型
但是,如果超過該間隔的數字已通過,則該方法將引發異常。我的問題是,IllegalArgumentException
和ArithmeticException
兩者同樣適用?如果是的話,舉兩個或多個例外類型同等適用的案例的例子。如果不是,爲什麼?
假設我設計了一種計算arcsin
函數的方法。當然,只有閉區間[-1,1]中的數字纔可以作爲函數的參數。同時使用兩種或多種異常類型
但是,如果超過該間隔的數字已通過,則該方法將引發異常。我的問題是,IllegalArgumentException
和ArithmeticException
兩者同樣適用?如果是的話,舉兩個或多個例外類型同等適用的案例的例子。如果不是,爲什麼?
在Java中,一次可能引發一種類型的異常。
它可以嵌套異常(通過圍繞一個又一個例外 - 看cause
參數作爲基礎Exception()構造的一部分)
在ARCSIN情況下,拋出將取決於功能合同是怎樣的說法定義。可以認爲這兩種情況都適用,但鑑於輸入參數的有效範圍已定義明確,可以將其作爲合同的一部分明確表示,並通過使用IllegalArgumentException
來拒絕無效參數。
使用的IllegalArgumentException
的是:
拋出,表明一個方法已通過非法或不適當的 爭論。
鑑於可以預先進行任何知道可接受值的範圍的算術,這似乎是異常拋出的正確選擇。
這確實是您設計中決定應該如何工作的一個因素。另一個選擇是拋出一個自定義的檢查異常,我認爲只要你在你的包/ API中保持一致,並且遵循你已有的編碼標準(如果你有的話),你會沒事的。我認爲這兩者中的任何一個都是有效的選擇,我只是做一個設計決策並記錄下來,這是未來發展的一個確定的決定。所有這一切說,我可能會選擇IllegalArgumentException
,因爲它早期發現問題。
IllegalArgumentException
似乎更有效的兩個。它告訴我我做了錯誤的事情(I.E.通過了無效的論據),而ArithmeticException
暗示應用程序無法執行算術,但沒有提供關於原因的線索。
'Math.asin'返回'NaN'。 – rgettman