Проверка на null в Java, NullPointerException - обрабатывать?
Проверка на null в Java, NullPointerException - обрабатывать или нет? Ситуация такая. Проект большой, писала не я. Часто возникают ошибки с NullPointerException. Конечно, некрасиво выглядит. Заказчик может увидеть. Иногда, можно понять по данным почему их нет. Иногда проблема неочевидна и надо потратить много времени, чтобы понять проблема в данных или нет. Иногда вообще не вижу проблемы. Что делать с этой задачей тогда? Не делать ее? Но других нет.
Мудрость форума: Работа
- Как долго Вы искали/ищете работу?5 207 ответов
- Должно ли государство платить пенсии самозанятым?512 ответов
- Прийти на собеседование в джинсах и футболке?449 ответов
- Почему стыдно не работать?4 623 ответа
- Почему сейчас так трудно найти работу?2 263 ответа
- Почему женщина ДОЛЖНА готовить, если она тоже работает?!2 700 ответов
- Почему многие мужчины хотят видеть своих жен работающими?2 638 ответов
- Не хочу работать. Никогда9 219 ответов
- Искать ли работу, имея накопления на 10 лет вперёд?3 182 ответа
- Мужчинам легче найти хорошо оплачиваемую работу! А работаем мы...784 ответа
36 ответов
Последний —
Перейти
Вообще на пустое значение проверять необходимо, особенно, если это запросы.
Как в сфере явы я хз. На хабре есть статья про эту ошибку habr. com/ru/articles/221243/
Как в сфере явы я хз. На хабре есть статья про эту ошибку habr. com/ru/articles/221243/
Гость
ой, а у вас ус отклеился :-))) в смысле когда пишешь противоречивые темы - не забывай ники менять :-) только что жеж на питоне и js писала :-)
Гость
Обрабатывать, конечно, надо.
Но когда "проект большой, писала не я", исправлять самой может оказаться сложнее, чем сделать всё с нуля.
Короче, по ситуации.
Но когда "проект большой, писала не я", исправлять самой может оказаться сложнее, чем сделать всё с нуля.
Короче, по ситуации.
Правда
В целом, ловить конкретно NullPointerException (NPE) через try-catch — это почти всегда антипаттерн и костыль. Вместо этого надо делать профилактику, чтобы его не возникало. На большом легаси-проекте это частый факап. Вот как это хэндлить: В первую очередь, надо чекать на null в начале методов для критичных параметров, используй Objects.requireNonNull() для явного факапа с понятным сообщением. Это сразу проясняет, откуда ноги растут. Заюзай аннотации @Nullable и @NotNull, они как документирование, но для компилятора и IDE, помогают отловить проблемы на ранней стадии. Каждый раз, когда видишь метод, который может отдавать непонятно что, оборачивай его в Optional. Это заставит того, кто вызывает код, явно обработать кейс с отсутствующим значением, а не получать NPE в лоб. Если видишь место, где постоянно вылезает NPE, не пытайся перепилить весь проект, а делай точечные правки. Добавь проверку в этом конкретном методе и логируй контекст, чтобы понять, какие данные пришли и почему там null.
Гость
В целом, ловить конкретно NullPointerException (NPE) через try-catch — это почти всегда антипаттерн и костыль. Вместо этого надо делать профилактику, чтобы его не возникало. На большом легаси-проекте это частый факап. Вот как это хэндлить: В первую очередь, надо чекать на null в начале методов для критичных параметров, используй Objects.requireNonNull() для явного факапа с понятным сообщением. Это сразу проясняет, откуда ноги растут. Заюзай аннотации @Nullable и @NotNull, они как документирование, но для компилятора и IDE, помогают отловить проблемы на ранней стадии. Каждый раз, когда видишь метод, который может отдавать непонятно что, оборачивай его в Optional. Это заставит того, кто вызывает код, явно обработать кейс с отсутствующим значением, а не получать NPE в лоб. Если видишь место, где постоянно вылезает NPE, не пытайся перепилить весь проект, а делай точечные правки. Добавь проверку в этом конкретном методе и логируй контекст, чтобы понять, какие данные пришли и почему там null.
Optional сразу нет, простите. Потом некрасивый код
Гость
архитектурно интересует. NullPointerException обычно возникает при доступе данных в обьекте, а обьект может быть пустой. Почему пустой обьект. Надоела Java, в JavaScript хоть оператор добавили, а так писать каждый раз
жуть.. пиши лучше как раньше - абстрактно, что работаешь в айти, получаешь миллионы.. а то когда пытаешься лезть в дебри - получается очень не очень. но зато почти нет подозрений, что ты нейронка. она бы так не написала
Гость
жуть.. пиши лучше как раньше - абстрактно, что работаешь в айти, получаешь миллионы.. а то когда пытаешься лезть в дебри - получается очень не очень. но зато почти нет подозрений, что ты нейронка. она бы так не написала
гениально. Спрашивала у другого разработчика про NullPointerException, он говорил, что надо смотреть по коду и по ситуации. В итоге по каждому NullPointerException ходила и ситуации были разные.
А оказывается, можно где-нибудь просто в C++ запретить нулевые указатели и все и ошибок не будет.
Чистый код, данные проходят через всю программу!!!))))))
А оказывается, можно где-нибудь просто в C++ запретить нулевые указатели и все и ошибок не будет.
Чистый код, данные проходят через всю программу!!!))))))
Гость
В целом, ловить конкретно NullPointerException (NPE) через try-catch — это почти всегда антипаттерн и костыль. Вместо этого надо делать профилактику, чтобы его не возникало. На большом легаси-проекте это частый факап. Вот как это хэндлить: В первую очередь, надо чекать на null в начале методов для критичных параметров, используй Objects.requireNonNull() для явного факапа с понятным сообщением. Это сразу проясняет, откуда ноги растут. Заюзай аннотации @Nullable и @NotNull, они как документирование, но для компилятора и IDE, помогают отловить проблемы на ранней стадии. Каждый раз, когда видишь метод, который может отдавать непонятно что, оборачивай его в Optional. Это заставит того, кто вызывает код, явно обработать кейс с отсутствующим значением, а не получать NPE в лоб. Если видишь место, где постоянно вылезает NPE, не пытайся перепилить весь проект, а делай точечные правки. Добавь проверку в этом конкретном методе и логируй контекст, чтобы понять, какие данные пришли и почему там null.
а если в базе данных нет? будет доступ к нулевому указателю, не очень понимаю. Можно пример кода или ссылку
Гость
гениально. Спрашивала у другого разработчика про NullPointerException, он говорил, что надо смотреть по коду и по ситуации. В итоге по каждому NullPointerException ходила и ситуации были разные.
А оказывается, можно где-нибудь просто в C++ запретить нулевые указатели и все и ошибок не будет.
Чистый код, данные проходят через всю программу!!!))))))
А оказывается, можно где-нибудь просто в C++ запретить нулевые указатели и все и ошибок не будет.
Чистый код, данные проходят через всю программу!!!))))))
в каком С++ ? про java же вроде разговор шёл. что то ты совсем в показаниях путаешься.. ну признайся уже, что либо не имеешь к программированию никакого отношения, либо недавно прошла курсы, где тебя ничему не научили
Гость
в каком С++ ? про java же вроде разговор шёл. что то ты совсем в показаниях путаешься.. ну признайся уже, что либо не имеешь к программированию никакого отношения, либо недавно прошла курсы, где тебя ничему не научили
под капотом у Java C++, можно замутить проверочку или скриптик, который исключает нулевые указатели - по сути это ячейка в памяти
Гость
ты о чём вообще? базы какие то приплела... может всё таки нейросеть? что то уже совсем смысл в писанине пропал... хотя нейросеть то его как раз внешне старается сохранять
ну выходит ошибка order is null - значит, поле order пустое, а данные хранятся в базе, а код Java их обрабатывает. Я хочу вывести на экран order, и, там "Вы заказали товар null". То есть вот такую низкоуровневую архитектурную логику видит пользователь. Его голова нагружена вот этими техническими подробностями
Гость
под капотом у Java C++, можно замутить проверочку или скриптик, который исключает нулевые указатели - по сути это ячейка в памяти
а под капотом у с++ ассемблер. ты не останавливайся на полпути! пиши сразу в машинных кодах! интересно - а язык у тебя хорошо подвешен? если реально захочешь устроиться программистом - сможешь красиво навешать лапши и удержаться от несения такого бреда, как тут?
Эксперты Woman.ru
-
Золотых Вера ВладимировнаПсихолог199 ответов -
Абрамов СергейПсихолог314 ответов -
Елизавета ПолетПсихолог4 801 -
Светлана ТатьяненкоПсихолог16 ответов -
Екатерина МетляеваПсихолог111 ответов -
Кулик Елена БорисовнаСемейный психолог10 ответов -
Владислав ПоляковКоуч индивидуального...36 ответов -
Сергей ГубановПсихолог23 ответа -
Виктория ТолкачеваПсихолог1 ответ -
Садовников ЭрнестПсихолог....1 031
Гость
как во всем проекте отключить возникновение NullPointerException. Наверняка, есть какой-то способ, чтобы везде не писать.
хм... а ты вообще в курсе, что такое исключение и в чём их глубинный смысл? тут вопрос не в том, как отключить, а в том, чтобы рядом нашёлся человек, который будет бить по рукам за попытки это сделать
Гость
ну выходит ошибка order is null - значит, поле order пустое, а данные хранятся в базе, а код Java их обрабатывает. Я хочу вывести на экран order, и, там "Вы заказали товар null". То есть вот такую низкоуровневую архитектурную логику видит пользователь. Его голова нагружена вот этими техническими подробностями
мда.... даже смысл ошибки ты не поняла... при чём тут NullPointerException?
Гость
в общем автор - написала бы ты как с тобой связаться, сколько денег дадите за исправление косяков и не компостировала бы мозги странными вопросами :-)
Правда
а если в базе данных нет? будет доступ к нулевому указателю, не очень понимаю. Можно пример кода или ссылку
Если в базе нет записи, ORM (например, Hibernate) или простой JDBC-запрос часто возвращают null. Доступ к этому null и вызовет NullPointerException (NPE).
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
Правда
Если в базе нет записи, ORM (например, Hibernate) или простой JDBC-запрос часто возвращают null. Доступ к этому null и вызовет NullPointerException (NPE).
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
Продолжение
String userName = user.getName(); //
String userName = user.getName(); //
Гость
автор опять ник и циферки поменял? если перефразировать вопрос автора, то он выглядит как что то типа - доктор, у меня открытый перелом обеих ног. посоветуйте, какую одежду мне лучше носить, чтобы не было видно торчащих костей и я могла нормально ходить
Гость
Если в базе нет записи, ORM (например, Hibernate) или простой JDBC-запрос часто возвращают null. Доступ к этому null и вызовет NullPointerException (NPE).
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
Допустим,есть метод, который ищет пользователя по ID.
Проблемный код, который кинет NPE:
```java
public User getUserById(Long id) {
// Этот метод выполнит SQL-запрос типа "SELECT * FROM users WHERE id = ?"
// Если записи нет, он вернет null.
User user = userRepository.findById(id);
// Если пользователь не найден (user == null), следующая строчка упадет с NPE
String userName = user.getName(); //
чего сказать то этим хотел?
Гость
Если запись в базе не найдена, запрос вернет null. Обращение к этому null вызовет NPE. Решение — всегда проверять результат на null или использовать Optional.
Код не отправляется на этом сайте :(
Код не отправляется на этом сайте :(
ну здорово. процитировал книжку. или какую то статью для начинающих. а какое это имеет отношение к ранее написанному про желание сделать мегахак, которых все такие исключения задавит на корню?
Рерол
ну здорово. процитировал книжку. или какую то статью для начинающих. а какое это имеет отношение к ранее написанному про желание сделать мегахак, которых все такие исключения задавит на корню?
Ну здорово. Могу тебе прислать код, если ты срешь ничего не видя перед собой.
Глобальный try-catch на NullPointerException — это не мегахак, а костыль. Он маскирует проблему, а не решает её. Ошибка уйдёт из логов, но программа будет работать неправильно, и заказчик увидит ещё более странные баги.
Правильный путь — профилактика:
1. Чекать на null точечно в начале методов для критичных параметров через Objects.requireNonNull().
2. Использовать Optional из Spring Data JPA для явной обработки случаев, когда значения нет.
3. Ставить аннотации @Nullable, чтобы понимать, что может прийти null.
Не надо давить все исключения разом. Исправлять код в самых болезненных местах, откуда чаще всего приходят NPE. Это и есть работа.
Глобальный try-catch на NullPointerException — это не мегахак, а костыль. Он маскирует проблему, а не решает её. Ошибка уйдёт из логов, но программа будет работать неправильно, и заказчик увидит ещё более странные баги.
Правильный путь — профилактика:
1. Чекать на null точечно в начале методов для критичных параметров через Objects.requireNonNull().
2. Использовать Optional из Spring Data JPA для явной обработки случаев, когда значения нет.
3. Ставить аннотации @Nullable, чтобы понимать, что может прийти null.
Не надо давить все исключения разом. Исправлять код в самых болезненных местах, откуда чаще всего приходят NPE. Это и есть работа.
Гость
Гость
Ну здорово. Могу тебе прислать код, если ты срешь ничего не видя перед собой.
Глобальный try-catch на NullPointerException — это не мегахак, а костыль. Он маскирует проблему, а не решает её. Ошибка уйдёт из логов, но программа будет работать неправильно, и заказчик увидит ещё более странные баги.
Правильный путь — профилактика:
1. Чекать на null точечно в начале методов для критичных параметров через Objects.requireNonNull().
2. Использовать Optional из Spring Data JPA для явной обработки случаев, когда значения нет.
3. Ставить аннотации @Nullable, чтобы понимать, что может прийти null.
Не надо давить все исключения разом. Исправлять код в самых болезненных местах, откуда чаще всего приходят NPE. Это и есть работа.
Глобальный try-catch на NullPointerException — это не мегахак, а костыль. Он маскирует проблему, а не решает её. Ошибка уйдёт из логов, но программа будет работать неправильно, и заказчик увидит ещё более странные баги.
Правильный путь — профилактика:
1. Чекать на null точечно в начале методов для критичных параметров через Objects.requireNonNull().
2. Использовать Optional из Spring Data JPA для явной обработки случаев, когда значения нет.
3. Ставить аннотации @Nullable, чтобы понимать, что может прийти null.
Не надо давить все исключения разом. Исправлять код в самых болезненных местах, откуда чаще всего приходят NPE. Это и есть работа.
опять таки - ты это к чему? я не автор. меня ответы на её странные вопросы не интересуют. я пытаюсь понять - ты кому все эти цитаты копипастишь? и к чему?
Фунтик
NPE можно обрабатывать, можно выкидывать Exception, можно скипать обработку, можно сделать ветвление через Optional.
Тебе принимать решение как поступить когда падает NPE. Точнее данный кейс уже видится что какая то кривота у тебя в коде. Если данные могут прийти с атрибутом = null можно на этапе валидации отказаться обрабатывать такую дто.
В общем смотреть нужно, но сам факт что у тебя падает NPE это уже плохой знак и показатель низкого твоего грейда.
Тебе принимать решение как поступить когда падает NPE. Точнее данный кейс уже видится что какая то кривота у тебя в коде. Если данные могут прийти с атрибутом = null можно на этапе валидации отказаться обрабатывать такую дто.
В общем смотреть нужно, но сам факт что у тебя падает NPE это уже плохой знак и показатель низкого твоего грейда.
Форум: Работа
Всего: 142 771 тема
Новые темы за сутки: 40 тем
- Позорная профессия или нет?9 ответов
- Токсичная начальница21 ответ
- Сколько у вас зп (девушки)?15 ответов
- Наращивание ресницНет ответов
- Кто работал или работает в сети Красное и белое? Стоит ли туда идти?5 ответов
- Помогите найти свою работу по таланту6 ответов
- Совет по увольнению2 ответа
- Вахта для девушек Рб1 ответ
- Если я устроюсь на любую работу меня похвалят на форуме?28 ответов
- Свой бизнес12 ответов
Популярные темы за сутки: 13 тем
- Если я устроюсь на любую работу меня похвалят на форуме?28 ответов
- Есть в России социальный лифт повышают ли талантов без связей и блата ????22 ответа
- Токсичная начальница21 ответ
- Сколько у вас зп (девушки)?15 ответов
- Свой бизнес12 ответов
- Позорная профессия или нет?9 ответов
- Помогите найти свою работу по таланту6 ответов
- Кто работал или работает в сети Красное и белое? Стоит ли туда идти?5 ответов
- Совет по увольнению2 ответа
- Вахта для девушек Рб1 ответ
Следующая тема
Предыдущая тема