1

我有一个方法可能会收到无效的输入值或带有相关错误消息的输出。

对于这两种情况,我想抛出一个异常。所以这两种情况都可能发生在一个方法调用中。那么当异常可以同时发生时,如何将其作为单个异常处理!

4

5 回答 5

2

看起来您正在尝试使用异常进行验证。这可能有效,但如果你想得到你试图验证的东西的所有错误,那么你需要做一些不同的事情。一些伪代码可以让您大致了解:

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 类或研究验证框架以找到适合此目的的框架。

于 2013-11-05T19:29:30.233 回答
1

不可能同时抛出一个以上的异常,如果您的方法被声明为抛出多个异常,则总是会首先抛出其中一个异常。例如:

public void method() throws Exception1, Exception2 {
    if (firstCondition)
        throw new Exception1();
    if (secondCondition)
        throw new Exception2();
    // body of method
}

在上面的玩具示例中,第一个或第二个条件都会发生,但它们不能同时发生,其中一个会首先为真,然后会引发相应的异常。

于 2013-11-05T19:16:43.013 回答
1

两个例外不可能同时发生。

当一个异常被抛出时,另一个无关紧要,因为代码流不再在那个方法上。

于 2013-11-05T19:16:46.910 回答
1

一段代码不可能同时抛出多个异常。在代码路径中触发的第一个将被抛出。

于 2013-11-05T19:18:08.380 回答
1

每个线程都有一个堆栈,异常意味着弹出一个框架,这意味着返回给调用者。所以不,如果在同一个线程中同时发生两个异常,那是没有意义的。

于 2013-11-05T19:18:49.283 回答