【问题标题】:Handling Runtime exception in Java在 Java 中处理运行时异常
【发布时间】:2012-05-23 09:58:18
【问题描述】:

我有以下代码

 try{//do something
     }
  catch (Exception e) {
        log.error(e, e);
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }

findbugs 静态分析工具会在其上抛出此警告

instanceof 将始终为 methodX 中的所有非空值返回 true,因为所有 RuntimeException 都是 RuntimeException 的实例

我不明白的是它的异常被捕获而不是运行时异常,那么为什么会出现这个警告呢?

【问题讨论】:

    标签: java exception-handling


    【解决方案1】:

    也许,// do something 代码不会抛出任何已检查的异常,因此您可以在 try 块中获得的唯一异常是未检查的异常(子类化 RuntimeException)。

    【讨论】:

      【解决方案2】:

      您也可以尝试以下代码。这将更好地阅读和维护。

      try{//do something
      }
      catch (RuntimeException e) {
          throw e;
      } 
      catch (Exception e) {
          throw new RuntimeException(e);
      }
      

      【讨论】:

        【解决方案3】:

        可能没有在“尝试”部分抛出不 RuntimeException 的方法。因此,您可以使用构造

        catch(RuntimeException e)
        {
         //Do something
        }
        

        【讨论】:

          【解决方案4】:

          试试http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html#propagate%28java.lang.Throwable%29。它完全符合您的要求。今天换了也是同样的原因(findbugs警告),也看了下这个方法的来源。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-27
            • 1970-01-01
            • 2019-07-19
            • 2018-06-17
            • 2012-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多