如何准确知道 NullPointerException 的来源?

How to know precisely where a NullPointerException comes from?

提问人:Kal8578 提问时间:6/2/2020 更新时间:6/2/2020 访问量:55

问:

我正在用Java编写一些代码。 我有很多类,这些类的子类有子类,这些子类有子类......你明白了。 在某些时候,在运行我的代码时,我有一个 NullPointerException。 Eclipse告诉我,它来自一行代码,如下所示:

Something1.Something2.Something3.Something4.Something5...

其中 Something(n+1) 是 Something(n) 的字段。

我的问题是,我有办法知道 NullPointerException 到底在哪里? 我的意思是,当我尝试访问其字段之一时,任何 Something(n) 都可能为 null 并导致异常。

提前谢谢你,

卡尔8578

Java Eclipse 调试 NullPointerException

评论

0赞 Kayaman 6/2/2020
你一开始就不应该写这样的长链。即使您使用的是 Java 14。
0赞 pafau k. 6/2/2020
代码可能不是您编写的。(如 - 可能有人出于正当理由寻找这个问题的答案,它仍然值得回答)
0赞 Kal8578 6/2/2020
哇,谢谢你的快速回答!不幸的是,我正在使用 Java 8(大学项目需要它),所以我想我必须一一检查每个字段......是的,这行代码很长,但到目前为止,我还没有找到更简单的方法来做事。
0赞 pafau k. 6/2/2020
那么你应该试试。一个类应该只访问它自己的字段,将此类表达式限制为点后的一个。使用方法调用,并且只与您知道的对象通信。见得墨忒耳定律
1赞 chrylis -cautiouslyoptimistic- 6/2/2020
这不是“子类”的示例,而是具有属性的类(这很好)。根据适当的行为,如果其中一个允许为 null,则可以使用链,或者如果存在 null 肯定是 bug,则可以使用调试器单步执行链中的每个链接。Optional

答:

1赞 pafau k. 6/2/2020 #1

您只能在 JDK 14+ 上获取有关 NullPointerException 的详细信息。