有一种我们使用的第三方库的方法(我不能将其命名,因为它是商业解决方案),其方法看起来或多或少像这样(批次和批次参数):
numerix.setPrice(Instrument instrument,YieldCurve yc,TradeDate date,Currency c,...)
我100%确定我传递的每个参数都是非空的。 但是我在方法中得到了一个NullPointerException。
怎么可能?
此外,我在堆栈跟踪中没有行号,所以我该如何调试呢?
答案 0 :(得分:3)
您的某个参数的成员可能为null,而setPrice方法正尝试使用该参数。
例如,Currency类可能有format
个成员。 c.format可能是你的空指针。检查参数的每个成员。
答案 1 :(得分:2)
他们的代码有很多种方法可以在没有你帮助的情况下取消引用空指针。
他们可能会使用您提供的值索引数组并提出空指针。
如果您没有源代码,并且您没有支持,那么您唯一的办法是使用javap
命令进行反编译,并使用调试器来指导您完成字节代码。
答案 2 :(得分:1)
想到一个明显的可能性,即numerix为空。
要做的是检查异常上的堆栈跟踪并查看抛出它的行。您是在通话中获得异常,还是来自功能内部?如果是后者,你会回到Aaron的答案:其中一个参数可能是一个成员为null的对象。或者也许在处理内部的某个地方,该函数由于其自身或无效输入的错误而创建一个空对象。 (在任何情况下都没有检查输入可能是一个错误,但无论如何。)
你有源代码吗?如果是这样,您可以回到堆栈跟踪标识的行。如果没有,你就是盲目的,你所能做的最好就是仔细检查你的所有参数。
答案 3 :(得分:0)