当抛出NPE时,JVM是否无法提示哪个变量/步为空?

时间:2013-08-26 22:10:20

标签: java nullpointerexception jvm

当多步骤单行语句导致NullPointerException(NPE)时,堆栈跟踪指示抛出NPE的行号。 JVM是否有可能在NPE消息中提供所有的其他信息,以缩小该行上实际产生NPE的哪个语句?

E.g。

myObject.getSomeField().doSomething();

myObjectmyObject.getSomeField()都可以为null,两者都会产生相同的堆栈跟踪。从技术上讲,JVM是否可以在此处提供其他信息以帮助减少歧义?

在代码中有很多方法可以避免这种情况,只需将步骤分散到多行:

myObject
    .getSomeField()
        .doSomething();

检查null并在每一步适当处理:

if (myObject != null)
{        
    SomeField myField = myObject.getSomeField();
    if (myField != null)
    {
        ...

以及使用三元运算符或其他快捷方式的解决方案。

但是,对于这个问题,我严格关注JVM可以根据已经可用的信息做些什么。 JVM是否有其他信息可以包含在NPE消息中以减轻任何不确定性?

0 个答案:

没有答案