当多步单行语句导致 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 消息中以减轻任何不确定性?