Java StackTrace 不显示行中的实际空值在哪里
Java StackTrace does not show where is the actual null in the line
以下异常:
Exception in thread "main" java.lang.NullPointerException
at javaapplication7.App.main(App.java:8)
Java Result: 1
从代码中抛出:
Object o = n1.getObj().getObj().getObj().getObj();
所以从堆栈跟踪来看,并不清楚哪个元素实际上是空的。有没有不调试就可以查出来的方法?
也许其他 JVM 可以?
您可以拆分代码,以便查看 NullPointerException
发生的位置
MyObject obj0 = obj.getObj0();
MyObject obj1 = obj0.getObj1();
MyObject obj2 = obj1.getObj2();
MyObject obj3 = obj2.getObj3();
不,您无法确定
中的哪个被调用者
Object o = obj.getObj().getObj().getObj().getObj();
通过查看堆栈跟踪导致 NullPointerException。通常建议将您的代码格式化为
Object o = obj.getObj()
.getObj()
.getObj()
.getObj();
出于这个原因。
因为他们都站在同一条线上
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();
以下异常:
Exception in thread "main" java.lang.NullPointerException
at javaapplication7.App.main(App.java:8)
Java Result: 1
从代码中抛出:
Object o = n1.getObj().getObj().getObj().getObj();
所以从堆栈跟踪来看,并不清楚哪个元素实际上是空的。有没有不调试就可以查出来的方法? 也许其他 JVM 可以?
您可以拆分代码,以便查看 NullPointerException
发生的位置
MyObject obj0 = obj.getObj0();
MyObject obj1 = obj0.getObj1();
MyObject obj2 = obj1.getObj2();
MyObject obj3 = obj2.getObj3();
不,您无法确定
中的哪个被调用者Object o = obj.getObj().getObj().getObj().getObj();
通过查看堆栈跟踪导致 NullPointerException。通常建议将您的代码格式化为
Object o = obj.getObj()
.getObj()
.getObj()
.getObj();
出于这个原因。
因为他们都站在同一条线上
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();