1

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

例如

myObject.getSomeField().doSomething();

要么为空,myObject要么myObject.getSomeField()为空,两者都会导致相同的堆栈跟踪。JVM 在技术上是否可以在此处提供额外信息以帮助减少歧义?

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

myObject
    .getSomeField()
        .doSomething();

在每个步骤中检查 null 并进行适当处理:

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

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

但是,对于这个问题,我非常关心 JVM 基于它已经可用的信息可以做什么。JVM 是否有其他信息可以包含在 NPE 消息中以减轻任何不确定性?

4

0 回答 0