码迷,mamicode.com
首页 > 其他好文 > 详细

谨慎使用Exception

时间:2021-03-16 13:58:43      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:otf   int   屏蔽   cep   question   bsp   use   str   cte   

有种观点认为,业务失败异常流程应该基于Exception控制,在这样的项目里就会看到大量的基于业务定义的Exception类,比如UserNotFoundException,LoginFailException什么的。或者把Service层所有的异常分支都包装成一个ServiceException什么的。这种情况下,throw Exception 就成为一个很常见的事件,这时重载fillInStackTrace 是可以有效益的。
但是我看到的大多数情况,大家还是把Exception作为技术上的异常而不是业务上的异常。所以,理论上要用到异常的时候不多。要真是发生了Exception,由于超出预期,反而恰恰需要stack trace。
 
重载fillInStackTrace在业务异常中很常见,但是如果一定要说弊端的话,如果想要stack的时候反而没有办法了,屏蔽异常栈主要是为了不执行private native Throwable fillInStackTrace(int dummy);这个方法而提高效率,出于这个目的考虑的话有更好的方案,动态决定需不需要异常栈——新增业务异常增加构造函数,用参数决定是否需要异常栈。调用Throwable的构造函数:
protected Throwable(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace);
参数writableStackTrace直接可以决定需不需要执行fillInStackTrace来提高性能。


参考:https://www.zhihu.com/question/21405047/answer/118977314

谨慎使用Exception

标签:otf   int   屏蔽   cep   question   bsp   use   str   cte   

原文地址:https://www.cnblogs.com/duanxz/p/14536046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!