应该API抛出NullPointerExceptions

时间:2013-09-18 09:35:09

标签: java api exception-handling

我使用商业API,并且有NullpointException来自API代码。

支持告诉我它是预期的,因为我调用的方法的一个输入参数是null,并且使用这个方法需要这个参数。

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

NullpointerExceptions退出API是不是不好的做法?如果不是,我必须检查所有类型RuntimeExceptions如果我使用该API的方法,如果我想确保我的软件不会崩溃。

如果是不好的做法,是否有任何文件或规格参考?

3 个答案:

答案 0 :(得分:5)

是的,我会说他们应该抛出IllegalArgumentException

请参阅:IllegalArgumentException or NullPointerException for a null parameter?

请继续阅读,因为这是最好的答案:https://stackoverflow.com/a/47710/2586804

主要区别在于IllegalArgumentException明确指出在使用图书馆时犯了错误。

无论哪种方式,您只需要正确使用库。如果你能处理它们,只能捕获异常。

答案 1 :(得分:4)

你说你必须检查所有RuntimeExceptions。答案是否定的!如果API以错误的方式使用,则可以抛出未经检查的运行时异常(无论是NullPointerExceptionIllegalArgumentException还是其他)。

在您的情况下,您使用的API方式错误,因此您获得了NullPointerException。如果你想抓住它,你的代码会是什么样子?

try {
    useAPI();
} catch(NullPointerException e) {
    useAPIcorrectly();
}

为什么不只做useAPIcorrectly();? ; - )

你可以在catch块中放置一些debuging输出用于开发,但是再次:如果在开发中,NullPointerException的堆栈跟踪也足以进行调试。然后,您可以将其修复为正确的API使用,并且再也不会看到这些异常: - )

答案 2 :(得分:2)

  

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

是。 API定义了如何正确使用它的合同。如果需要一个值而没有传入,我完全可以期待RuntimeException回来。在尝试使用API​​之前,您应该对数据进行验证,以确保您提供所需的内容。你应该捕获RuntimeException,就像stonedsquirrel说的那样。