Проверка на null в Java, NullPointerException - обрабатывать?
Проверка на null в Java, NullPointerException - обрабатывать или нет? Ситуация такая. Проект большой, писала не я. Часто возникают ошибки с NullPointerException. Конечно, некрасиво выглядит. Заказчик может увидеть. Иногда, можно понять по данным почему их нет. Иногда проблема неочевидна и надо потратить много времени, чтобы понять проблема в данных или нет. Иногда вообще не вижу проблемы. Что делать с этой задачей тогда? Не делать ее? Но других нет.
Мудрость форума: Работа
- Почему женщина ДОЛЖНА готовить, если она тоже работает?!2 706 ответов
- Прийти на собеседование в джинсах и футболке?450 ответов
- Мужчинам легче найти хорошо оплачиваемую работу! А работаем мы...788 ответов
- Почему сейчас так трудно найти работу?2 274 ответа
- Как долго Вы искали/ищете работу?5 211 ответов
- Почему стыдно не работать?4 626 ответов
- Искать ли работу, имея накопления на 10 лет вперёд?3 183 ответа
- Должно ли государство платить пенсии самозанятым?514 ответов
- Не хочу работать. Никогда9 226 ответов
- Почему многие мужчины хотят видеть своих жен работающими?2 645 ответов
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
-
Михаил ПанПсихолог272 ответа -
Сергей ГубановПсихолог34 ответа -
Елизавета ПолетПсихолог5 200 -
Ольга РебертПсихология человеческих...13 ответов -
Яковенко ДанилПсихолог12 ответов -
Алексей СемкоПерсональный тренер,...23 ответа -
Павел ПоповСпециалист по работе с...768 ответов -
Сергей ЗабиякоСемейный психолог102 ответа -
Юлия СергеевнаПсихолог. Психотерапевт7 ответов -
Панарина Дарья НиколаевнаПроводник в осознанность и...13 ответов
Гость
как во всем проекте отключить возникновение 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 это уже плохой знак и показатель низкого твоего грейда.
Форум: Работа
Всего: 144 917 тем
Новые темы за сутки: 102 темы
- Ненавижу работодателейНет ответов
- Как найти баланс между работой и личной жизнью: делитесь своими лайфхаками4 ответа
- На высокие должности пробиваются только через постель? Или это стереотип?32 ответа
- Почему в некоторых организациях обед длится целый час?3 ответа
- Удаленка (работа)1 ответ
- Совет насчёт работы21 ответ
- Пошли бы работать курьером, если зарплата выше офисной?30 ответов
- Мужчина стилист-парикмахер16 ответов
- Что делать, если не получается найти работу по специальности?32 ответа
- Классное руководство1 ответ
Популярные темы за сутки: 35 тем
- Что делать, если не получается найти работу по специальности?32 ответа
- На высокие должности пробиваются только через постель? Или это стереотип?32 ответа
- Пошли бы работать курьером, если зарплата выше офисной?30 ответов
- Совет насчёт работы21 ответ
- Мужчина стилист-парикмахер17 ответов
- Как найти баланс между работой и личной жизнью: делитесь своими лайфхаками4 ответа
- Почему в некоторых организациях обед длится целый час?3 ответа
- Классное руководство1 ответ
- Удаленка (работа)1 ответ
- Ненавижу работодателей1 ответ
Следующая тема
Предыдущая тема