2011-01-11 92 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”包中,这可能是而不是你想要的。

相关问题