我检查了 JDK 中的所有内置异常,我只SizeLimitExceededException在大小超过预期长度时才发现。但是,如果我想在大小限制低于预期长度时抛出异常,有没有我可以调用的内置异常类?
SSN 是 9 位数字。如果输入的 SSN 小于 9 位长度,那么我想抛出这个异常。
虽然使用合适的例外是一种很好的做法,你应该花一些时间来寻找合适的例外(就像你所做的那样),通常也没有必要过度使用它。
在你的例子中,如果你只是抛出一个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 的约束,但几乎所有大型框架都支持一种或另一种形式的验证) .