В Java у NullPointerException могут появиться детальные сообщения

Вышел новый черновик JEP, в котором предлагается улучшить java.lang.NullPointerException, снабдив его сообщением, объясняющим причину выброса исключения. В этом сообщении будет содержаться информация о том, что именно было null и какое действие вызвало ошибку.

Например, если в выражении a.b.c.d поле b было null, то сообщение будет примерно следующим:

'a.b' is null. Can not read field 'c'.

Другой пример: выражение – obj.hashCode(), сообщение:

'obj' is null. Can not invoke method 'java.lang.Object.hashCode()I'.

Генерацию сообщения предлагается сделать с помощью поля backtrace в объекте исключения, которое является приватным для JVM. Также необходим анализ потока байткода, чтобы восстановить цепочку вызовов, приведших к нулевому объекту. Так как генерация сообщения является недешёвой операцией, то предлагается сделать её ленивой, иначе при каждом выбрасывании NullPointerException будет выполняться лишняя работа.

Детальные сообщения в NullPointerException будут чрезвычайно полезными и могут значительно упростить диагностику, особенно в тех случаях, когда цепочки вызовов методов длинные и непонятно, какой именно объект был null.

Интересно, что такие сообщения могут быть реализованы и без изменений исходного кода JDK. Андрей Паньгин утверждает, что детальные сообщения NPE у них уже есть и они делают это всего лишь в ~100 строк кода.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2020