代码对比
✕ Java 8
// Old NPE message: // "NullPointerException" // at MyApp.main(MyApp.java:42) // Which variable was null?!
✓ Java 14+
// Modern NPE message: // Cannot invoke "String.length()" // because "user.address().city()" // is null // Exact variable identified!
发现此代码有问题? 告诉我们。
为什么现代方式更好
精确变量
消息在链中指出 null 变量的名称。
更快调试
立即知道是哪个链中的引用为 null。
零代码更改
JVM 自动生成消息,无需代码更改。
旧方式
晦涩的 NPE
现代方式
详细的 NPE
自 JDK
14
难度
入门
JDK 支持
有帮助的 NullPointerException
可用
自 JDK 14 起广泛可用(2020 年 3 月)
工作原理
有帮助的 NPE 描述哪个表达式为 null 以及操作失败的原因。不再需要在链式方法调用中猜测哪个引用为 null。
相关文档