Информативные NullPointerExceptions
JVM автоматически сообщает, какая переменная была null.
Сравнение кода
✕ 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.
Бесплатное улучшение
Никаких изменений в коде — достаточно запустить на JDK 14+.
Старый подход
Криптичная NPE
Современный подход
Подробная NPE
Начиная с JDK
14
Сложность
Начинающий
Поддержка JDK
Информативные NullPointerExceptions
Доступно
Доступно в JDK 14 (март 2020)
Как это работает
Информативные NPE описывают, какое выражение было null и какая операция завершилась ошибкой. По умолчанию включено начиная с Java 14 — изменений в коде не требуется, достаточно обновить JDK.
Связанная документация