gpt4 book ai didi

java - "you shouldn' t catch NPE” - 这是基于上下文的吗?

转载 作者:行者123 更新时间:2023-12-02 01:24:31 28 4
gpt4 key购买 nike

请耐心等待,因为我已经阅读了一些相关内容,但我仍然不确定我的想法是否正确,但我想完全理解这一点......

我最近发现自己陷入了一场围绕务实的代码方法的辩论中,我所得到的反馈(我认为)是对一般软件工程建议的歪曲。

因此,假设您有一个处理输入的方法 - 假设您以特定方式接受字符串和格式(假设这不是任何现有 Java 提供的方式)。如果传入 null,该方法可能抛出 NPE,因为这种情况不应该发生。

我没有像 StringUtils 的 Apache Commons 库那样添加任何 NPE 处理,当您传入 null 时,它返回一个空字符串,因为在该方法的上下文中, null不应该提供。我想让实现来决定如何处理这个问题。

对于我来说,这样做的逻辑是你不一定想要这个 null值只是像平常一样被吞掉,但可能想要捕获这个并重新抛出该事件作为另一个异常来解释“这不应该发生” - 例如,如果它是一个被认为是强制性的步骤。

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

在我看来,就是这样

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

(例如)正在做,而实际上处理 null 作为异常......

try {
myStringMethod( somevar );
}
catch ( final NullPointerException e )
{
Throw new MySpecificException( e );
}

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

从它的表达方式来看,它似乎表明 NPE 永远不应该被看到 - 我同意这一点,但肯定的是,通过稍微忽略原因来“处理它”实际上是错误的方式?

最佳答案

NullPointerException(几乎)总是一个错误。任一方法接受 null 作为参数,在这种情况下,它永远不应该抛出 NPE。或者它不接受 null,在这种情况下,调用者有责任不传递它。

捕获NullPointerException(几乎)永远不是解决方案。

关于java - "you shouldn' t catch NPE” - 这是基于上下文的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57153342/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com