与我同在,因为我已经阅读了一些内容,但是我仍然不确定我是否正确地考虑了这个问题,但是我想完全理解这一点... < / p>
我最近在一场围绕务实的代码方法的辩论中发现自己,据此,我得到的反馈是(我认为)对一般软件工程建议的误解。
因此,请考虑您有一个处理输入的方法-假设您以一种特殊的方式采用String和格式(假定这不是现有的Java所提供的方式)。如果传入null,则方法可以抛出NPE,因为这不应该发生。
我没有像StringUtils的Apache Commons库那样添加任何NPE处理,在其中传递null
时它会提供一个空字符串,因为在该方法的上下文中,{{1 }}不应该提供。我想让实施决定如何处理。
对于我来说,这样做的逻辑是,您不一定要像平常一样吞下这个null
值,而是可能想抓住这一点并将其重新出现作为另一个例外来解释“这不应该发生的事情”-说,如果这是必须执行的步骤。
一位同事说,“捉住NPE被认为是不好的做法” ,但是对此的进一步研究表明,这仅是您忽略 NPE(或吞下它。)
在我看来,就是这样
null
(例如)正在执行,而实际上处理将null作为例外...
if(var = null) { return ""; }
...是处理不应为空的强制值的有效方法。
按照它的解释,它似乎暗示着永远不应该看到NPE-我同意,但是肯定地通过忽略原因来“处理”是实际上错误的方式吗?
答案 0 :(得分:2)
NullPointerException
(几乎)总是一个错误。任何一种方法都接受null
作为参数,在这种情况下,它永远不要抛出NPE。或者它不接受null
,在这种情况下,呼叫者有责任不通过它。
捕获NullPointerException
几乎从来不是解决方案。