在Java中,您何时应该IllegalArgumentException
以及何时InvalidParameterException
?
来自C#背景,我们将得到ArgumentNullException
来自ArgumentException
。如果我想在Java中实现等效的ArgumentNullException
/ ParameterNullException
,我应该扩展IllegalArgumentException
还是InvalidParameterException
?
注意:我不是要尝试实现ArgumentNullException
/ ParameterNullException
这样可以让我更好地理解我是否可以将它们与C#框架相匹配。
答案 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”中,可能不是您想要的内容。