当多步骤单行语句导致NullPointerException(NPE)时,堆栈跟踪指示抛出NPE的行号。 JVM是否有可能在NPE消息中提供所有的其他信息,以缩小该行上实际产生NPE的哪个语句?
E.g。
myObject.getSomeField().doSomething();
myObject
或myObject.getSomeField()
都可以为null,两者都会产生相同的堆栈跟踪。从技术上讲,JVM是否可以在此处提供其他信息以帮助减少歧义?
在代码中有很多方法可以避免这种情况,只需将步骤分散到多行:
myObject
.getSomeField()
.doSomething();
检查null并在每一步适当处理:
if (myObject != null)
{
SomeField myField = myObject.getSomeField();
if (myField != null)
{
...
以及使用三元运算符或其他快捷方式的解决方案。
但是,对于这个问题,我严格关注JVM可以根据已经可用的信息做些什么。 JVM是否有其他信息可以包含在NPE消息中以减轻任何不确定性?