【问题标题】:Simultaneously occuring multiple exceptions in javajava中同时发生多个异常
【发布时间】:2013-11-05 19:15:30
【问题描述】:

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

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

【问题讨论】:

  • 让我们从头开始——理解java中的异常:docs.oracle.com/javase/tutorial/essential/exceptions
  • 创建自己的 CompositeException 类扩展 Exception 包含多条消息....
  • @Butz 我很清楚我在这里问的情况。并不是我不知道这是什么意思!!我只想知道是否有人处理过类似的事情!
  • @RoddyoftheFrozenPeas 是在正确的轨道上。进行所有验证并汇总验证结果。编写您自己的验证异常,它可以跟踪所有这些单独的条件。填充它然后扔掉它。正如许多人已经指出的那样,您不能抛出多个异常,因为抛出异常表示程序流返回。
  • @RoddyoftheFrozenPeas...让我试试这个方法。谢谢!!!

标签: java exception throw


【解决方案1】:

看起来您正在尝试使用异常进行验证。这可能会奏效,但如果您想获得与您尝试验证的事物有关的所有问题,那么您需要做一些不同的事情。一点伪代码给你一个大致的概念:

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

【讨论】:

  • 这是有意义的方法!谢谢@dimoniy ...从stackoverflow学到了很多东西!!!
  • @KrithikaVittal 我的荣幸
【解决方案2】:

不可能同时抛出一个以上的异常,如果你的方法被声明抛出多个异常,那么总是先抛出一个异常。例如:

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

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

【讨论】:

    【解决方案3】:

    两个异常不可能同时发生。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-31
          • 1970-01-01
          相关资源
          最近更新 更多