捕获空指针异常是代码异味吗?

2022-08-31 17:13:27

最近,我的一位同事写了一些代码来捕获整个方法周围的空指针异常,并返回一个结果。我指出了空指针可能有很多原因,所以我们将其更改为一个结果的防御性检查。

然而,捕捉NullPointerException对我来说似乎是错误的。在我看来,Null 指针异常是错误代码的结果,而不是系统中的预期异常。

是否有任何情况捕获空指针异常是有意义的?


答案 1

是的,捕获任何几乎总是代码气味。C2 Wiki似乎也同意这一点。RuntimeException

一个例外可能是一些特别防御性的代码片段,它们运行来自其他模块的几乎随机的代码。这种防御结构的例子是EDT,ThreadPools/Executors和插件系统。


答案 2

我能想到一个用途,永远抓住一个:NullPointerException

catch (NullPointerException) {
    ApplyPainfulElectricShockToProgrammer();
}

推荐