|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Petro123Чего то не хватает, т.к. "внешние" и "ошибка в коде" не слова антонимы. Пример? RuntimeError не беру- это третий вариант, да. Tsyklopвот ту не совсем согласен. Если вот брать Spring к примеру. То там делают непроверяемые исключения если не хватает данных, не правильный логин или пароль и т.д. Но ведь это не значит что ошибка в коде. В спринге наг@нокожено немало. Если брать системные исключения- то всё, как я писал. Единственная неочевидная вещь - NumberFormatException - видимо предполагается, что пржде чем за toInteger хвататься надо пройтись регуляркой, или вообще форматированное поле ввода использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 07:44 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
chpashaзабыл ника надо использовать тип Optional стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа Если не использоват kotlin, то можно хотя бы @Nonnull/@Nullable использовать и читать варнинги. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 07:48 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл никОт кого-кого, а от вас я такой чуши услышать не ожидал. Именно потому что его можно обработать, NumberFormatException и является проверяемым"Аналогично, шеф". Я не зря вставлял ссылки на документацию - оба исключания являются наследником RuntimeException . Они оба непроверяемые, каким бы странным это не казалось в вашей картине мира. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 08:56 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
TsyklopХороший вопрос. Почему IOException проверяемое, а NPE нет. Я загуглил и выделил такие критерии: - придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами - причина выше делает код более уродливым - свидетельствует об ошибке программиста Ваши варианты? почему же все таки NPE это проверяемое исключение? Кстати. По сути все проверяемые исключения не являются исключениями вообще. Открывая файл, даже если он тут точно был, никогда нельзя быть уверен, что он ещё есть. Просто потому, что его может удалить другая программа. Это не исключительная ситуация, а нормальный результат. И любой запрос в сеть не обязан сделать то, что его просят. Поэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>. Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 09:32 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey Tomin, Потому что для асинхронной работы придется весь код переписать. Он дугой будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 09:51 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.в моделировании ИС строят упрощенную модель. Т.е.допускают что файл не удалят, а если удалят, то это форс мажор. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 09:55 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
с изером кстати, неплохая идея. но суть это просто параллельная концепция замены проверяемого ексепшена и всё. короче, те же яйца, но в анфас. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 10:51 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>. Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки. тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 10:52 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
andreykaTAlexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>. Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки. тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно.+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 11:33 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
andreykaTтоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно. Отличий много, перечислю основные - 1) Исключения, даже checked легко забыть обработать\подавить пустым catch блоком. В случае Either, а лучше наверное даже Try, тебе никуда не деться, придется обработать. Этот концепт почему-то тяжелее всего дается java-програмситам, которым Java слишком много позволяет в плане игнора исключительных ситуаций 2) Исключения, это замаскированный аналог goto, из-за которого флоу программы становится неочевидным и запутанным 3) Исключения генерируют стектрейс, что намного перфоманс затратнее чем создание обертки Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:13 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Basil A. Sidorovзабыл никОт кого-кого, а от вас я такой чуши услышать не ожидал. Именно потому что его можно обработать, NumberFormatException и является проверяемым"Аналогично, шеф". Я не зря вставлял ссылки на документацию - оба исключания являются наследником RuntimeException . Они оба непроверяемые, каким бы странным это не казалось в вашей картине мира. Да, вы правы, NumberFormatException является Runtime, что лишь еще раз доказывает корявость дизайна. В идеале, опять же все должно сводиться к Optional[Number], просто на момент написания NFE, очевидно ни опшиналов ни какого-либо другого механизма не существовало. Они выбрали оптимальный на тот момент вариант, ну такова селяви. Но это не отменяет всего что я сказал прежде и честно говоря я вообще против каких=либо эксепшенов ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:20 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл никandreykaTтоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно. Отличий много, перечислю основные - 1) Исключения, даже checked легко забыть обработать\подавить пустым catch блоком. В случае Either, а лучше наверное даже Try, тебе никуда не деться, придется обработать. Этот концепт почему-то тяжелее всего дается java-програмситам, которым Java слишком много позволяет в плане игнора исключительных ситуаций 2) Исключения, это замаскированный аналог goto, из-за которого флоу программы становится неочевидным и запутанным 3) Исключения генерируют стектрейс, что намного перфоманс затратнее чем создание обертки Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д. т.е. ты считаешь когда эксепшн обрабатывают специальной уникальной для эксепшна конструкцией - это типа плохо и не тру. а когда его обрабатывают по-сути очередным иф-елсом -- это окей? )) мне кажется, что кейс он вообще-то изначально предназначался для кое-чего другого а то что в той же скале они порой, мапят фор-аелдами, а ловят эксепшены кейсами -- вот тут точно чот не то в датском королевстве. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:28 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл никСписок можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д. это кстати приятное его свойство, но как быть с риском образования матрёшек. когда у тебя будет изер изера изера? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:30 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
andreykaTзабыл никСписок можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д. это кстати приятное его свойство, но как быть с риском образования матрёшек. когда у тебя будет изер изера изера? это как раз-таки легко. Для этого и существует for-comprehension. Откуда появляется второй слой either, если он должен схлопываться flatMap? Если приведешь пример, можем вместе обсудить как отрефакторить. У меня лично такого не встречалось. Вот Future[Try[Option]] - тут есть определенные проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:34 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
окей, я тебя понял ) периодически втыкаюсь в это и как то там переставляю всё местами и получается избавиться. наверное это и правильно. будет - спрошу. кстати футур трай опшн - тоже неплохой вариант матрёшки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:35 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл ник1) Исключения, даже checked легко забыть обработать\подавить пустым catch блокомЛюбое исключение можно подавить, но нельзя "забыть" о проверяемых исключениях. Проверяемые исключения именно для того и делали, чтобы гарантировать их обработку.Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д."Допустим, ты пробил стену головой. Ну и что ты будешь делать в соседней камере?" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:38 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
andreykaT т.е. ты считаешь когда эксепшн обрабатывают специальной уникальной для эксепшна конструкцией - это типа плохо и не тру. а когда его обрабатывают по-сути очередным иф-елсом -- это окей? )) мне кажется, что кейс он вообще-то изначально предназначался для кое-чего другого а то что в той же скале они порой, мапят фор-аелдами, а ловят эксепшены кейсами -- вот тут точно чот не то в датском королевстве. Нету никакой специальной конструкции и нету никакого иф-елса. Отсутсвие значения\возможность ошибки\асинхронность это лишь побочные эффекты вашей бизнес-логики, чтобы четко описать их суть, и вводятся эти контейнеры(Try, Option...). На входе мы проверили валидность данных, поместили в контекст и дальше работаем с чистеньким кодом Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Каждый метод возвращает опшинал, но внутри for{} - мы работаем только с чистыми значениями, если где-то вернется None, то без твоего вмешательства цепочка прервется и на выходе будет None, который ты ЕДИНОЖДЫ должен обработать само собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:43 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Basil A. SidorovЛюбое исключение можно подавить, но нельзя "забыть" о проверяемых исключениях. Проверяемые исключения именно для того и делали, чтобы гарантировать их обработку. Тема дискуссии потихоньку размывается. Вы скорее говорите о Java, а я в целом о механизмах обработки ошибок. В контексте Java, учитывая реалии и длинный хвост backward-compatibility, я в принципе согласен с вашими замечаниями. Я лишь хочу сказать что механизм чекед эксепшенов это был эксперимент, и он по факту не удался. А насчет "нельзя забыть" приводит лишь к прекрасному коду типа Код: java 1. 2. 3. 4. 5.
что скорее не решает проблему, а еще больше усложняет и запутывает. В случае типа, в котором закодирована возможность ошибки, проигнорировать не получится ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:50 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
andreykaTAlexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>. Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки. тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. Какими кейсами? Вы о чём? На самом деле проблема явно проявляется, когда список объектов для обработки куда-то ушёл, а потом оттуда надо сообщить, что 3 файла обработаны, один не найден, один не того формата. И вот тут с exception начинается ломка, а с either - всё просто и удобно. Или когда надо обработать список объектов, которые в процессе обработки либо претерпевают превращения, либо отбраковываются, а на выходе- надо обработанные выдать, а остальные- записать в лог. И тут получается либо адский цикл с кучей continue (return, если разбить на методы), либо простейший функциональный пайплайн. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 13:50 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
забыл никА насчет "нельзя забыть" приводит лишь к прекрасному коду типа Код: java 1. 2. 3. 4. 5.
что скорее не решает проблему, а еще больше усложняет и запутывает."Вы просто не умеете их готовить". Исключительная ситуация создаётся внешними условиями. Способ обработки никак не может повлиять на сам факт наличия (отсутствия) исключительной ситуации. Если вы пытаетесь обработать исключительную ситуацию, не понимая, что делать - будет плохо при любом способе обработки. Если вы разумный человек и не пытаетесь делать то, чего не понимаете, то контролируемые исключения - всего лишь способ явно указать: "я не знаю, что делать с этим исключением". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 14:04 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Alexey Tominчто 3 файла обработаны, один не найден, один не того формата.3 типа исключения и секции. Что сложного? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 14:08 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Вернее даже две. Сколько обработано вообще оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 14:09 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Petro123Что сложного?В стримы не воткнёшь, а значит "больше кода". P.S. Нет, я не считаю, что это плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 14:10 |
|
Почему NullPointerException не проверяемое исключение?
|
|||
---|---|---|---|
#18+
Petro123Alexey Tominчто 3 файла обработаны, один не найден, один не того формата.3 типа исключения и секции. Что сложного? а куда список правильно обработанных? В конструктор исключения? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 14:27 |
|
|
start [/forum/topic.php?fid=59&msg=39748794&tid=2121581]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 166ms |
0 / 0 |