我有一个方法可能会收到无效的输入值或带有相关错误消息的输出。
对于这两种情况,我想抛出一个异常。所以这两种情况都可能发生在一个方法调用中。那么当异常可以同时发生时,如何将其作为单个异常处理!
看起来您正在尝试使用异常进行验证。这可能有效,但如果你想得到你试图验证的东西的所有错误,那么你需要做一些不同的事情。一些伪代码可以让您大致了解:
public ValidationResult validateInput(Input input) {
ValidationResult result = new ValidationResult();
if (input.someField() == null) {
result.addError("Some field cannot be null");
}
//etc
return result;
}
这个想法是你有一个 ValidationResult 对象,它将存储输入错误的所有内容。验证完成后,您可以像这样处理它:
ValidationResult result = validateInput(someInput);
if (result.hasErrors()) {
for (ErrorMessage message : result.getErrors()) {
log.error(message.getMessage());
} else {
//success
}
您可以编写自己的 ValidationResult 类或研究验证框架以找到适合此目的的框架。
不可能同时抛出一个以上的异常,如果您的方法被声明为抛出多个异常,则总是会首先抛出其中一个异常。例如:
public void method() throws Exception1, Exception2 {
if (firstCondition)
throw new Exception1();
if (secondCondition)
throw new Exception2();
// body of method
}
在上面的玩具示例中,第一个或第二个条件都会发生,但它们不能同时发生,其中一个会首先为真,然后会引发相应的异常。
两个例外不可能同时发生。
当一个异常被抛出时,另一个无关紧要,因为代码流不再在那个方法上。
一段代码不可能同时抛出多个异常。在代码路径中触发的第一个将被抛出。
每个线程都有一个堆栈,异常意味着弹出一个框架,这意味着返回给调用者。所以不,如果在同一个线程中同时发生两个异常,那是没有意义的。