InvalidParameterException或IllegalArgumentException

Cor*_*ius 18 c# java exception

在Java中什么时候应该抛出IllegalArgumentException什么时候InvalidParameterException?从C#背景的,我们将有一个ArgumentNullException从派生ArgumentException.如果我想在Java中实现等效ArgumentNullException/ ParameterNullException应该扩展IllegalArgumentExceptionInvalidParameterException

注意:我不是试图实现一个ArgumentNullException/ ParameterNullException这只会让我更好地理解我是否可以将它们与C#框架相匹配.

Ale*_*exR 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.
Run Code Online (Sandbox Code Playgroud)

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

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


And*_*s_D 15

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

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

  • @Cornelius - 我只使用这个特殊的`InvalidParameterException`****如果我必须从*Java Crypto Architecture*框架实现接口或子类类型,并且必须抛出此异常(我通常留给专家; - )) (8认同)
  • 但什么时候会抛出`InvalidParameterException`而不是`IllegalArgumentException`? (3认同)

jpk*_*ing 5

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

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

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

抛出以指示方法已传递非法或不适当的参数。

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

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