InvalidParameterException或IllegalArgumentException

时间:2011-01-11 08:20:37

标签: c# java exception

在Java中,您何时应该IllegalArgumentException以及何时InvalidParameterException? 来自C#背景,我们将得到ArgumentNullException来自ArgumentException。如果我想在Java中实现等效的ArgumentNullException / ParameterNullException,我应该扩展IllegalArgumentException还是InvalidParameterException

注意:我不是要尝试实现ArgumentNullException / ParameterNullException这样可以让我更好地理解我是否可以将它们与C#框架相匹配。

3 个答案:

答案 0 :(得分:16)

首先感谢你提出的问题。现在我知道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.

IllegalArgumentException属于java.lang,因此可用于任何目的。

我相信在99.9%的情况下,您应该使用IllegalArgumentException并仅在安全上下文中使用InvalidParameterException。

答案 1 :(得分:15)

没有明显需要对这些异常进行子类化,我会立即使用它们来表示已经使用非法参数调用了一个方法。我总是在例外消息部分描述真正的原因。

java.security.InvalidParameterException已经是IllegalArgumentException 的子类,设计用于JCA / JCE引擎类(JavaDoc),我不会在不同的地方使用或子类化它上下文。

答案 2 :(得分:4)

当您希望参数不为null时,已抛出异常:NullPointerException。一些程序员认为只有错误的代码会抛出NullPointerException,但是如果你真的希望参数不为null,并且你无法从这种情况中恢复,那么这就是抛出的正确异常。来自JavaDoc:

  

当应用程序在需要对象的情况下尝试使用null时抛出。

但是如果我们不是在谈论空值,而只是一个无效的值,那么你应该抛出IllegalArgumentException。来自JavaDoc:

  

抛出以表明方法已被传递为非法或不恰当的参数。

作为一般性建议,我会说你应该熟悉Java异常(来自java.lang包),并适当地使用它们。如果找不到合适的例外,请扩展一个例外。

另请注意,异常“InvalidParameterException”位于包“java.security”中,可能不是您想要的内容。