|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Хороший вопрос. Почему IOException проверяемое, а NPE нет. Я загуглил и выделил такие критерии: - придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами - причина выше делает код более уродливым - свидетельствует об ошибке программиста Ваши варианты? почему же все таки NPE это проверяемое исключение? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 21:52 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Tsyklopпочему же все таки NPE это проверяемое исключение? имхо смысл некоторых (чтоб не разводить флуд о том нужны ли проверяемые исключения в принципе) исключений в том, что они могут неизбежно возникнуть при определенных обстоятельствах. Хороший пример IOException. Пропала сеть, сайт недоступен - ошибка. Если метод "знает" об этом, но ничего не может (или не должен) по этому поводу предпринять, он прокидывает исключение выше. Возможно вызывающий код сможет что-то с этим исключением сделать, например повторить. Возможно он прокинет исключение еще дальше, если это не по его части. А NullPointer это ошибка программиста, ее не должно было быть, но она случилась ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 00:05 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
По прошествии лет можно констатировать что эксперимент с checked эксепшенами провалился, и хотя совсем от этого уйти не получается, но многие фреймворки и обычные программисты двигаются в сторону только unchecked exceptions. В крайне редком случае, например как в примере выше и в целом когда есть какая-то разумная возможность обработать эксепшен, то только тогда можно использовать checked. В случае нуллпоинтер, нулевая ссылка - всегда нулевая ссылка, и лучше минимизировать ущерб сразу же остановив программу. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 00:35 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
TsyklopПочему IOException проверяемое, а NPE нет. ... Ваши варианты? почему же все таки NPE это проверяемое исключение?Определитесь-таки, NPE checked или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 06:25 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, опечатался. NPE не проверяемое. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 10:41 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Может я тупой, а что такое проверяемое и не проверяемое ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 10:50 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ?наверно те что пишутся в контракте метода... Названии ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:07 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ? Видимо вопрос в том что автор хочет чтоб они наподобие SQLException или IOException, требовали отлавливания/обработки. Были более предсказуемы. Решить можно несколькими способами. Самый простой с опытом сам видишь где эта херня точно может всплыть. Ну и проверки делать таки. Покурите Lombok например по этому поводу. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:09 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Тогда тем более не понимаю. Хочешь писать в "название метода" - пиши, хочешь отлавливать - отлавливай Никто не запрешает. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:19 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Ilya007, По мне ошибка бд и ошибка null всплывает одинаково) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:19 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ? компилятор требует указывать чекед в троус метода - единственное различие. А то, что можешь или нет - это уже сахар. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:21 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Озверин, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 11:58 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
TsyklopПочему..... https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 12:06 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ? Может. Но и предыдущие ответы тупые, кроме ссылки, которую вы дали. Проверяемое исключение - которое требует обработки в блоке try... catch... [finally]. Вместо того, чтобы делать обработку внутри метода, можно добавить его в throws метода, тогда try... catch будет нужно в коде, охватывающем вызов метода. Он может быть в другом методе, тогда опять надо решать - обрабатывать исключение в нём или вынести в throws. Но где-нибудь в программе catch будет. Для непроверяемых испключений использование try... catch необязательно. Для проверяемых исключений надо иметь ввиду приём - можно вместо try... catch использовать try... finally без catch и throws чтоб обработку производить в catch в коде, вызывающем метод. Проверяемые исключения можно преобразовывать в непроверяемые и наоборот. Так что обработка исключений в Java не такая уж простая тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 12:52 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
TsyklopХороший вопрос. Почему IOException проверяемое, а NPE нет. Я загуглил и выделил такие критерии: - придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами - причина выше делает код более уродливым - свидетельствует об ошибке программиста Ваши варианты? почему же все таки NPE это проверяемое исключение? Проверяемые исключения- это те, которые возникают из-за внешних обстоятельств. Сеть умерла, БД сдохла, диск переполнился. Непроверяемые - это ошибки в коде. NPE - ошика в коде, без вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 13:16 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey Tomin, Чего то не хватает, т.к. "внешние" и "ошибка в коде" не слова антонимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 13:31 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey Tomin, вот ту не совсем согласен. Если вот брать Spring к примеру. То там делают непроверяемые исключения если не хватает данных, не правильный логин или пароль и т.д. Но ведь это не значит что ошибка в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 13:35 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Tsyklop, Добавка в имени метода тебе подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 13:42 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey TominПроверяемые исключения- это те, которые возникают из-за внешних обстоятельств. Сеть умерла, БД сдохла, диск переполнился. Непроверяемые - это ошибки в коде. NPE - ошика в коде, без вариантов. Создатели_JavaRuntime exceptions represent problems that are the result of a programming problem, and as such, the API client code cannot reasonably be expected to recover from them or to handle them in any way. вот тут вот и начинается полное непонимание, как "API client code" может "recover from" "Сеть умерла, БД сдохла, диск переполнился". Т.ч. IMHO все, что Вы перечислили, это как раз скорее RuntimeException, чем API Exception а в целом, IMHO синтаксический сахар. Проверять и внятно обрабатывать (как минимум логировать) - никто не мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 13:43 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevвот тут вот и начинается полное непонимание, как "API client code" может "recover from" "Сеть умерла, БД сдохла, диск переполнился" зависит от того - кто этот "client api". в идеале он может их корректно обработать, если знает, что они могут возникнуть. Как минимум не упасть, а выдать пользователю внятное сообщение или предложить повторить попытку (если например по timeout обломались). Однако на практике это исключение возможно придется прокинуть на X уровней вверх прежде чем мы достигнем того места, где мы можем "восстановиться". Да, в каком-то смысле это сахар, т.к. мы явно заставляет пользователя API обратить внимание на проблемы, которые могут возникнуть независимо от его воли. Однако сахар этот не очень сладкий в виду других недостатков. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 14:42 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Вообще, стратегия обработки ошибок последовательно шла так: Возврат кода ошибки или dummy value(-1, NaN и т.д) ===> этот способ имеет следующие недостатки: не всегда найдется корректное dummy значение, ведь -1 может быть правильным значением 2) Так как сигнатура метода никак не описывает возможности ошибки, ее легко можно забыть обработать Непроверяемые исключения ==> Это был следующий шаг, который позволял делать централизованную обработку ошибок, но все равно сама возможность ошибки никак не декларировалась и нужно было смотреть документацию и тд. Проверяемые исключения ==> Это был эксперимент Java, насколько я знаю ни в одном другом промышленном языке такой конструкции так и не прижилось. Идея была в том, чтобы закодировать возможность ошибки в самой сигнатуре метода, вы обязаны предпринять какие-то действия(либо пробросить либо обработать), но недостатками было 1) захламление кода, когда метод может состоять из одной строчки полезного кода и 15 эксепшен хандлеры и 2) непредсказуемый флоу выполнения кода, вещь аналогичная goto, если крепко призадуматься. Умные люди извлекли из этого урок и теперь мейнстримом является описывать возможность ошибок в качестве типа возвращаемого значения, и не только возможность ошибок, а опциоальность, асинхронность и т.д, что по научному называется effects. В данном случае программист всегда видит имеется ли возможность что вызываемый код вернет ошибку и имеет свободу извлечь значение из контейнерного типа или работать с контейнером, а реальное извлечение значение будет где-то наверху(в идеале во входной точке приложения). Таким образом ядро вашего кода остается pure(предсказуемым и без side-effectов), ошибку невозможно пропустить, но ваш флоу не может прерваться и уйти непонятно куда. Что касается топика, и нуллпоинтеров, нет смысла кодировать такие проверки, а надо использовать тип Optional если есть какие-то возможности отсутствия значения. Если же нуллпоинтер выскакивает в другом месте, то это очевидная ошибка и программу надо прекращать ибо ваши assumptions о том что переменная будет не равна null оказались вдребезги разбиты суровойреальностью, и чтобы не навредить коду выше или ниже, лучше завершить JVM немедленно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 17:16 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл никЕсли же нуллпоинтер выскакивает в другом месте, то это очевидная ошибка и программу надо прекращать ибо ваши assumptions о том что переменная будет не равна null оказались вдребезги разбиты суровойреальностью, и чтобы не навредить коду выше или ниже, лучше завершить JVM немедленноВот так и получается, что авианосцы на боевом дежурстве оказываются небоеспособны, потому что решение о перезагрузке выпавшего в осадок компьютера системы управления огнём принимается, если правильно помню, за двенадцать часов. "Персонал проинструктирован вводить данные в это поле". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 17:27 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл ника надо использовать тип Optional стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 17:37 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
chpashaзабыл ника надо использовать тип Optional стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа 1) Приведение типов - зло. 2) Почему параметр не Optional? Ну я про то и говорю, что когда есь разумные предпосылки того что объекта может и небыть и есть какой-то способ обойти это - тогда используем Optional, в других случаях даем JVM спокойно умереть от NPE ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 17:41 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл ник....даем JVM спокойно умереть от NPE Как-то круто. А если JVM это WebLogic с 100500 корпоративных пользователей и не законченными транзакциями, тоже даем "спокойно умереть от NPE" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 17:45 |
|
|
start [/forum/topic.php?fid=59&msg=39747823&tid=2121581]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 166ms |
0 / 0 |