java-异常处理反模式:为什么记录并返回null是反模式
作者:互联网
关于异常处理反模式的文章提到(参考:https://today.java.net/article/2006/04/04/exception-handling-antipatterns)“ Log and Return Null”是反模式.给出的原因是“不是返回null,而是引发异常,然后让调用方对其进行处理.您仅应在正常(非异常)用例中返回null”
根据这篇文章,以下代码是不良的编程习惯和反模式
catch (NoSuchMethodException e) {
LOG.error("Blah", e);
return null;
}
catch (NoSuchMethodException e) {
e.printStackTrace();
return null;
}
我要求更多解释.我能理解为什么只返回null是一种反模式,因为它吞没了永远丢失信息的异常.但是使用LOG.error(“ Blah”,e);和e.printStackTrace();,信息将被记录或打印,并且不会丢失-那么为什么它是反模式?
解决方法:
调用者没有获得有关发生什么错误以及为什么发生的错误的其他语义信息.他们是否通过了错误的输入?在这种情况下,给他们一个针对客户的错误(在RPC或其他某种远程调用中可以更好地转换).是否有一些依赖的上游服务消失了?抛出语义异常,以便调用者可以向用户提供有用的反馈(例如,“数据库不可用.请致电帮助台,地址为…”). null使得无法以有意义的方式对错误做出响应-它变成了笼统的“发生错误”.
标签:exception-handling,java 来源: https://codeday.me/bug/20191121/2052477.html