“您不应该抓住NPE”-是基于上下文的吗?

时间:2019-07-22 20:33:09

标签: java exception nullpointerexception

与我同在,因为我已经阅读了一些内容,但是我仍然不确定我是否正确地考虑了这个问题,但是我想完全理解这一点... < / p>

我最近在一场围绕务实的代码方法的辩论中发现自己,据此,我得到的反馈是(我认为)对一般软件工程建议的误解。

因此,请考虑您有一个处理输入的方法-假设您以一种特殊的方式采用String和格式(假定这不是现有的Java所提供的方式)。如果传入null,则方法可以抛出NPE,因为这不应该发生。

我没有像StringUtils的Apache Commons库那样添加任何NPE处理,在其中传递null时它会提供一个空字符串,因为在该方法的上下文中,{{1 }}不应该提供。我想让实施决定如何处理。

对于我来说,这样做的逻辑是,您不一定要像平常一样吞下这个null值,而是可能想抓住这一点并将其重新出现作为另一个例外来解释“这不应该发生的事情”-说,如果这是必须执行的步骤。

一位同事说,“捉住NPE被认为是不好的做法” ,但是对此的进一步研究表明,这仅是您忽略 NPE(或吞下它。)

在我看来,就是这样

null

(例如)正在执行,而实际上处理将null作为例外...

if(var = null) { return ""; }

...是处理不应为空的强制值的有效方法。

按照它的解释,它似乎暗示着永远不应该看到NPE-我同意,但是肯定地通过忽略原因来“处理”是实际上错误的方式吗?

1 个答案:

答案 0 :(得分:2)

NullPointerException(几乎)总是一个错误。任何一种方法都接受null作为参数,在这种情况下,它永远不要抛出NPE。或者它不接受null,在这种情况下,呼叫者有责任不通过它。

捕获NullPointerException几乎从来不是解决方案。