以下例外:
Exception in thread "main" java.lang.NullPointerException
at javaapplication7.App.main(App.java:8)
Java Result: 1
从代码抛出:
Object o = n1.getObj().getObj().getObj().getObj();
因此,从堆栈跟踪中不清楚哪个元素实际上是null。有没有一种方法可以在没有调试的情况下找到它? 也许其他一些JVM会做什么?
答案 0 :(得分:6)
不,你无法弄清楚
中的哪些被叫者Object o = obj.getObj().getObj().getObj().getObj();
通过查看堆栈跟踪导致NullPointerException。通常建议将代码格式化为
Object o = obj.getObj()
.getObj()
.getObj()
.getObj();
因此。
答案 1 :(得分:2)
您可以拆分代码,以便查看NullPointerException
发生的位置
MyObject obj0 = obj.getObj0();
MyObject obj1 = obj0.getObj1();
MyObject obj2 = obj1.getObj2();
MyObject obj3 = obj2.getObj3();
答案 2 :(得分:1)
因为他们都站在同一条线上
Object o = obj.getObj0().getObj1().getObj2().getObj3();
您不能指望其中一个的行号不同。
就个人而言,要保存,我会将它们分开并检查空值,如果可能的话。
MyObject obj0 = obj != null ? obj.getObj0() : null;
MyObject obj1 = obj0 != null ? obj.getObj1() : null;
MyObject obj2 = obj1 != null ? obj.getObj2() : null;
MyObject obj3 = obj2 != null ? obj.getObj3() : null;
如果你真的想使用链接,那么你应该对其进行格式化,以便每次调用都在不同的行上以避免这种情况。
Object o = n1.getObj()
.getObj()
.getObj()
.getObj();