2011-01-11 93 views
14

在Java中,何時應該拋出IllegalArgumentException以及InvalidParameterException? 來自C#背景,我們將有一個ArgumentNullExceptionArgumentException派生。如果我想實現一個等效的ArgumentNullException/ParameterNullException在Java中,我應該擴展IllegalArgumentExceptionInvalidParameterExceptionInvalidParameterException或IllegalArgumentException

注意:我沒有試圖實現一個ArgumentNullException/ParameterNullException這只是爲我提供了一個更好的理解,如果我可以將它們與C#框架進行匹配。

回答

13

有沒有明顯的需要將這些異常進行子類化,我馬上用它們來發信號通知一個方法被調用了非法參數。我總是會在異常消息部分描述真正的原因。

java.security.InvalidParameterException已經是IllegalArgumentException設計供JCA/JCE引擎類(JavaDoc的)中使用的子類,我不會用或在不同的上下文繼承它。

+3

但是,當你拋出`InvalidParameterException`而不是`IllegalArgumentException`? – Cornelius 2011-01-11 08:27:33

11

首先感謝您的問題。現在我知道InvalidParameterException的存在。此異常屬於打包java.security並根據其的Javadoc

* This exception, designed for use by the JCA/JCE engine classes, 
* is thrown when an invalid parameter is passed 
* to a method. 

IllegalArgumentExcption屬於java.lang和因此可用於任何目的。

我相信,在99.9%的情況下,您應該使用IllegalArgumentExcption並僅在安全上下文中使用InvalidParameterException。

4

當您希望參數不爲空時,已經有一個例外拋出:NullPointerException。一些程序員認爲只有錯誤的代碼纔會拋出NullPointerException,但是如果你確實希望參數不爲null,並且無法從這種情況中恢復,那麼這是正確的拋出異常。來自JavaDoc:

當應用程序嘗試在需要對象的情況下使用null時拋出。

但是,如果我們不是在談論空值,而只是一個無效值,那麼你應該拋出IllegalArgumentException。來自JavaDoc:

拋出以指示方法已通過非法或不恰當的參數。

作爲一般性建議,我會說你應該熟悉Java異常(來自java.lang包),並適當地使用它們。如果你沒有找到合適的例外,那麼擴展一個例外。

另請注意,異常「InvalidParameterException」位於「java.security」包中,這可能是而不是你想要的。

相關問題