【发布时间】:2014-07-08 04:01:35
【问题描述】:
一篇关于异常处理反模式的文章提到(参考: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();,信息被记录或打印并且不会丢失——那为什么它是一个反模式呢?
【问题讨论】:
-
您的来电者在哪里?如果是远程调用或网络服务呢?
-
你正在吃掉失败的原因,你的客户永远不会知道为什么这个方法调用失败了......它只是失败了!!!!!!
-
你以前有没有为自己以外的人写过代码?
-
我或多或少同意这篇文章,但我不知道“你应该只在正常(非异常)用例中返回 null”的含义。在正常情况下,您将返回一个非空值。这种双重思维在异常恐惧症中似乎太常见了。作者现在假设或暗示三种场景:异常、正常但返回空值,以及正常且不返回空值。生活通常没有那么复杂。