内置异常长度比预期短?

Ful*_*per -9 java exception

我检查了 JDK 中的所有内置异常,我只SizeLimitExceededException在大小超过预期长度时才发现。但是,如果我想在大小限制低于预期长度时抛出异常,有没有我可以调用的内置异常类?

更新:

SSN 是 9 位数字。如果输入的 SSN 小于 9 位长度,那么我想抛出这个异常。

Arv*_*ise 7

虽然使用合适的例外是一种很好的做法,你应该花一些时间来寻找合适的例外(就像你所做的那样),通常也没有必要过度使用它。

在你的例子中,如果你只是抛出一个new IllegalArgumentException("SSN is only of length <X> but length 9 is required"). 它将使执行失败并为您提供有意义的堆栈跟踪。

请注意,将异常用于控制流被认为是不好的做法。所以请永远不要使用类似的东西

try {
    person.setSSN(ssn);
catch (SSNTooShortException e) {
    println("SSN too short! Please try again");
}
Run Code Online (Sandbox Code Playgroud)

而是使用自定义验证器在设置之前检查 SSN,并且仅使用异常来防止编程错误。

if (!SSNFormat.matches(ssn)) { // <-- whoops condition is inverted
    person.setSSN(ssn);
}
Run Code Online (Sandbox Code Playgroud)

这段代码有望很快在您的(单元)测试中失败,并且您将知道您的编程逻辑存在缺陷。

当然,根据您的应用程序,您可以并且应该使用众多验证器框架之一,而不是使用自定义验证器(例如,查看Hibernate 的约束,但几乎所有大型框架都支持一种或另一种形式的验证) .