异常处理程序应该提供上下文信息并且保留原始异常

发布时间:2016-12-9 9:55:17 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"异常处理程序应该提供上下文信息并且保留原始异常",主要涉及到异常处理程序应该提供上下文信息并且保留原始异常方面的内容,对于异常处理程序应该提供上下文信息并且保留原始异常感兴趣的同学可以参考一下。

     Exception handlers should provide some context and preserve the original exception 处理异常时,需要进行两个操作: 1、使用context减缓复制的问题 2、保留原始异常信息,进行堆栈问题的追踪( stack trace ) 看一些例子: try { /* ... */ } catch (Exception e) { LOGGER.info("context"); } // Non-Compliant - exception is lost try { /* ... */ } catch (Exception e) { LOGGER.info(e); } // Non-Compliant - context is required try { /* ... */ } catch (Exception e) { LOGGER.info(e.getMessage()); } // Non-Compliant - exception is lost (only message is preserved) try { /* ... */ } catch (Exception e) { LOGGER.info("context", e); } // Compliant(符合规范) try { /* ... */ } catch (Exception e) { // Non-Compliant - exception is lost throw new RuntimeException("context"); } try { /* ... */ } catch (Exception e) { // Compliant throw new RuntimeException("context", e); } 一般性的异常,所有问题都必须要处理,但是对于一些特殊的异常,必须使用传播( propagation ),而且这时的传播是允许的。 try { /* ... */ } catch (RuntimeException e) { // Compliant - propagation of the specific exception throw e; } catch (Exception e) { // Compliant - catching of the general exception LOGGER.error("...", e); } 受控制的Exception转换成Runtime Exception减缓受控异常的传播。 try { /* ... */ } catch (IOException e) { // Compliant - propagation of checked exception by encapsulating it into an unchecked exception throw new MyRuntimeException(e); } 不管是log还是重新抛出异常都伴随着context的信息。

上一篇:多态 C++
下一篇:泛型

相关文章

相关评论