API是否应该抛出NullPointerException异常?

4

我使用一个商业API,但在API代码中出现了NullpointException异常。

支持团队告诉我这是预料之中的,因为我调用的方法之一的输入参数是null,而这个参数是使用该方法所必需的。

这真的是我的问题吗?因为我在传递参数给API之前没有检查它们。

NullpointerExceptions从API中出现不好吧?如果不是这样,那么如果我想确保我的软件不崩溃,我将不得不检查所有种类的RuntimeExceptions,以便使用该API的方法。

如果这是不好的做法,是否有任何文档或规范提到这一点?


让你的软件崩溃吧。在所有异常之后继续尝试是行不通的。 - artbristol
3个回答

5

4
您说需要检查所有的RuntimeExceptions,但事实上不必如此。如果API被错误使用了,抛出未经检查的运行时异常是完全可以的(无论是NullPointerException、IllegalArgumentException还是其他异常类型)。
在您的情况下,由于API使用不当,所以会抛出NullPointerException。如果想要捕获这个异常,您的代码应该怎么写呢?
try {
    useAPI();
} catch(NullPointerException e) {
    useAPIcorrectly();
}

为什么不只是使用 useAPIcorrectly(); 呢?;-)

你可以在捕获块中添加一些调试输出以进行开发,但是如果是开发环境,则 NullPointerException 的堆栈跟踪对于调试也足够了。 然后你将修复它以正确使用 API,并再也不会看到这些异常了:-)


2

这真的是我的错吗,因为在将参数传递给API之前我没有检查它们的值?

是的。API定义了其正确使用的契约。如果需要某个值而未传递该值,则我完全希望会返回一个RuntimeException。在尝试使用API之前,您应该验证数据,以确保您提供的是所需的内容。正如stonedsquirrel所说,您不应该捕获RuntimeException


我认为最好的答案是不捕获运行时异常。谢谢。 - Felix Schmidt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接