我使用商业API,并且有NullpointException
来自API代码。
支持告诉我它是预期的,因为我调用的方法的一个输入参数是null
,并且使用这个方法需要这个参数。
这真的是我的错,因为在将参数传递给API之前我没有检查过这些参数吗?
让NullpointerExceptions
退出API是不是不好的做法?如果不是,我必须检查所有类型RuntimeExceptions
如果我使用该API的方法,如果我想确保我的软件不会崩溃。
如果是不好的做法,是否有任何文件或规格参考?
答案 0 :(得分:5)
是的,我会说他们应该抛出IllegalArgumentException
请参阅:IllegalArgumentException or NullPointerException for a null parameter?
请继续阅读,因为这是最好的答案:https://stackoverflow.com/a/47710/2586804
主要区别在于IllegalArgumentException
明确指出你在使用图书馆时犯了错误。
无论哪种方式,您只需要正确使用库。如果你能处理它们,只能捕获异常。
答案 1 :(得分:4)
你说你必须检查所有RuntimeExceptions
。答案是否定的!如果API以错误的方式使用,则可以抛出未经检查的运行时异常(无论是NullPointerException
,IllegalArgumentException
还是其他)。
在您的情况下,您使用的API方式错误,因此您获得了NullPointerException
。如果你想抓住它,你的代码会是什么样子?
try {
useAPI();
} catch(NullPointerException e) {
useAPIcorrectly();
}
为什么不只做useAPIcorrectly();
? ; - )
你可以在catch块中放置一些debuging输出用于开发,但是再次:如果在开发中,NullPointerException
的堆栈跟踪也足以进行调试。然后,您可以将其修复为正确的API使用,并且再也不会看到这些异常: - )
答案 2 :(得分:2)
这真的是我的错,因为在将参数传递给API之前我没有检查过这些参数吗?
是。 API定义了如何正确使用它的合同。如果需要一个值而没有传入,我完全可以期待RuntimeException
回来。在尝试使用API之前,您应该对数据进行验证,以确保您提供所需的内容。你应该不捕获RuntimeException,就像stonedsquirrel说的那样。