powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему NullPointerException не проверяемое исключение?
25 сообщений из 190, страница 3 из 8
Почему NullPointerException не проверяемое исключение?
    #39748771
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Чего то не хватает, т.к. "внешние" и "ошибка в коде" не слова антонимы.

Пример?
RuntimeError не беру- это третий вариант, да.

Tsyklopвот ту не совсем согласен. Если вот брать Spring к примеру. То там делают непроверяемые исключения если не хватает данных, не правильный логин или пароль и т.д. Но ведь это не значит что ошибка в коде.

В спринге наг@нокожено немало.

Если брать системные исключения- то всё, как я писал.

Единственная неочевидная вещь - NumberFormatException - видимо предполагается, что пржде чем за toInteger хвататься надо пройтись регуляркой, или вообще форматированное поле ввода использовать.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748772
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaзабыл ника надо использовать тип Optional
стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа

Если не использоват kotlin, то можно хотя бы @Nonnull/@Nullable использовать и читать варнинги.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748785
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никОт кого-кого, а от вас я такой чуши услышать не ожидал. Именно потому что его можно обработать, NumberFormatException и является проверяемым"Аналогично, шеф".
Я не зря вставлял ссылки на документацию - оба исключания являются наследником RuntimeException .
Они оба непроверяемые, каким бы странным это не казалось в вашей картине мира.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748789
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopХороший вопрос. Почему IOException проверяемое, а NPE нет.

Я загуглил и выделил такие критерии:
- придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами
- причина выше делает код более уродливым
- свидетельствует об ошибке программиста

Ваши варианты? почему же все таки NPE это проверяемое исключение?

Кстати. По сути все проверяемые исключения не являются исключениями вообще.
Открывая файл, даже если он тут точно был, никогда нельзя быть уверен, что он ещё есть. Просто потому, что его может удалить другая программа. Это не исключительная ситуация, а нормальный результат.
И любой запрос в сеть не обязан сделать то, что его просят.
Поэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.
Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748794
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
Потому что для асинхронной работы придется весь код переписать. Он дугой будет.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748796
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.в моделировании ИС строят упрощенную модель. Т.е.допускают что файл не удалят, а если удалят, то это форс мажор.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748812
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с изером кстати, неплохая идея. но суть это просто параллельная концепция замены проверяемого ексепшена и всё. короче, те же яйца, но в анфас.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748815
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.
Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки.
тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748835
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTAlexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.
Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки.
тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно.+1
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748891
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTтоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно.

Отличий много, перечислю основные -
1) Исключения, даже checked легко забыть обработать\подавить пустым catch блоком. В случае Either, а лучше наверное даже Try, тебе никуда не деться, придется обработать. Этот концепт почему-то тяжелее всего дается java-програмситам, которым Java слишком много позволяет в плане игнора исключительных ситуаций
2) Исключения, это замаскированный аналог goto, из-за которого флоу программы становится неочевидным и запутанным
3) Исключения генерируют стектрейс, что намного перфоманс затратнее чем создание обертки
Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748898
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovзабыл никОт кого-кого, а от вас я такой чуши услышать не ожидал. Именно потому что его можно обработать, NumberFormatException и является проверяемым"Аналогично, шеф".
Я не зря вставлял ссылки на документацию - оба исключания являются наследником RuntimeException .
Они оба непроверяемые, каким бы странным это не казалось в вашей картине мира.
Да, вы правы, NumberFormatException является Runtime, что лишь еще раз доказывает корявость дизайна. В идеале, опять же все должно сводиться к Optional[Number], просто на момент написания NFE, очевидно ни опшиналов ни какого-либо другого механизма не существовало. Они выбрали оптимальный на тот момент вариант, ну такова селяви.

Но это не отменяет всего что я сказал прежде и честно говоря я вообще против каких=либо эксепшенов
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748901
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никandreykaTтоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами. тут не кровати переставлять надо. тут шлюх менять нужно.

Отличий много, перечислю основные -
1) Исключения, даже checked легко забыть обработать\подавить пустым catch блоком. В случае Either, а лучше наверное даже Try, тебе никуда не деться, придется обработать. Этот концепт почему-то тяжелее всего дается java-програмситам, которым Java слишком много позволяет в плане игнора исключительных ситуаций
2) Исключения, это замаскированный аналог goto, из-за которого флоу программы становится неочевидным и запутанным
3) Исключения генерируют стектрейс, что намного перфоманс затратнее чем создание обертки
Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д.

т.е. ты считаешь когда эксепшн обрабатывают специальной уникальной для эксепшна конструкцией - это типа плохо и не тру. а когда его обрабатывают по-сути очередным иф-елсом -- это окей? )) мне кажется, что кейс он вообще-то изначально предназначался для кое-чего другого а то что в той же скале они порой, мапят фор-аелдами, а ловят эксепшены кейсами -- вот тут точно чот не то в датском королевстве.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748902
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никСписок можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д.
это кстати приятное его свойство, но как быть с риском образования матрёшек. когда у тебя будет изер изера изера?
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748907
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTзабыл никСписок можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д.
это кстати приятное его свойство, но как быть с риском образования матрёшек. когда у тебя будет изер изера изера?

это как раз-таки легко. Для этого и существует for-comprehension. Откуда появляется второй слой either, если он должен схлопываться flatMap? Если приведешь пример, можем вместе обсудить как отрефакторить. У меня лично такого не встречалось. Вот Future[Try[Option]] - тут есть определенные проблемы.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748909
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
окей, я тебя понял ) периодически втыкаюсь в это и как то там переставляю всё местами и получается избавиться. наверное это и правильно. будет - спрошу.

кстати футур трай опшн - тоже неплохой вариант матрёшки.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748913
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник1) Исключения, даже checked легко забыть обработать\подавить пустым catch блокомЛюбое исключение можно подавить, но нельзя "забыть" о проверяемых исключениях.
Проверяемые исключения именно для того и делали, чтобы гарантировать их обработку.Список можно продолжать, Either это прежде всего value, которое можно хранить в массиве, передавать в функцию и т.д."Допустим, ты пробил стену головой. Ну и что ты будешь делать в соседней камере?"
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748916
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
т.е. ты считаешь когда эксепшн обрабатывают специальной уникальной для эксепшна конструкцией - это типа плохо и не тру. а когда его обрабатывают по-сути очередным иф-елсом -- это окей? )) мне кажется, что кейс он вообще-то изначально предназначался для кое-чего другого а то что в той же скале они порой, мапят фор-аелдами, а ловят эксепшены кейсами -- вот тут точно чот не то в датском королевстве.
Нету никакой специальной конструкции и нету никакого иф-елса. Отсутсвие значения\возможность ошибки\асинхронность это лишь побочные эффекты вашей бизнес-логики, чтобы четко описать их суть, и вводятся эти контейнеры(Try, Option...). На входе мы проверили валидность данных, поместили в контекст и дальше работаем с чистеньким кодом

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
def loadEmployee(name:String):Optional[Employee] = db.loadEmployee(name)
def getManager(emp:Employee):Optional[Manager] = emp.getManager
def getDepartment(man:Manager):Optional[Department] = man.getDepartment

//точка входа
def findEmployeeManagerDepartmentName(name:String) = {
   if(name.isBalnk) /// throw
   val depName = for {
       e <- loadEmployee(name)
       man <- getManager(e)
       dep <- getDepartment(man)
   } yield name
   depName match {
      case Some(n) => println("Name is " + n)
      case None => print("Not found")
   }
}



Каждый метод возвращает опшинал, но внутри for{} - мы работаем только с чистыми значениями, если где-то вернется None, то без твоего вмешательства цепочка прервется и на выходе будет None, который ты ЕДИНОЖДЫ должен обработать само собой.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748921
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЛюбое исключение можно подавить, но нельзя "забыть" о проверяемых исключениях.
Проверяемые исключения именно для того и делали, чтобы гарантировать их обработку.
Тема дискуссии потихоньку размывается. Вы скорее говорите о Java, а я в целом о механизмах обработки ошибок. В контексте Java, учитывая реалии и длинный хвост backward-compatibility, я в принципе согласен с вашими замечаниями. Я лишь хочу сказать что механизм чекед эксепшенов это был эксперимент, и он по факту не удался. А насчет "нельзя забыть" приводит лишь к прекрасному коду типа

Код: java
1.
2.
3.
4.
5.
try{
   db.call()
} catch (Throwable e){
   // Something happened
}



что скорее не решает проблему, а еще больше усложняет и запутывает. В случае типа, в котором закодирована возможность ошибки, проигнорировать не получится
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748922
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTAlexey TominПоэтому в правильном мире все подобные методы должны возвращать нечто вроде Either<IOErrorDescription, File>.
Но что-то подобная прекрасная вещь из функционального мира никак не попадёт в JVM-языки.
тоже самое разница вместо трайкача ты делаешь всё совершенно тоже самое но кейсами.

Какими кейсами? Вы о чём?

На самом деле проблема явно проявляется, когда список объектов для обработки куда-то ушёл, а потом оттуда надо сообщить, что 3 файла обработаны, один не найден, один не того формата. И вот тут с exception начинается ломка, а с either - всё просто и удобно.
Или когда надо обработать список объектов, которые в процессе обработки либо претерпевают превращения, либо отбраковываются, а на выходе- надо обработанные выдать, а остальные- записать в лог.
И тут получается либо адский цикл с кучей continue (return, если разбить на методы), либо простейший функциональный пайплайн.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748934
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА насчет "нельзя забыть" приводит лишь к прекрасному коду типа
Код: java
1.
2.
3.
4.
5.
try{
   db.call()
} catch (Throwable e){
   // Something happened
}

что скорее не решает проблему, а еще больше усложняет и запутывает."Вы просто не умеете их готовить".
Исключительная ситуация создаётся внешними условиями. Способ обработки никак не может повлиять на сам факт наличия (отсутствия) исключительной ситуации.
Если вы пытаетесь обработать исключительную ситуацию, не понимая, что делать - будет плохо при любом способе обработки.
Если вы разумный человек и не пытаетесь делать то, чего не понимаете, то контролируемые исключения - всего лишь способ явно указать: "я не знаю, что делать с этим исключением".
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748938
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tominчто 3 файла обработаны, один не найден, один не того формата.3 типа исключения и секции. Что сложного?
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее даже две.
Сколько обработано вообще оффтоп.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748946
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Что сложного?В стримы не воткнёшь, а значит "больше кода".

P.S.
Нет, я не считаю, что это плохо.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748963
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Alexey Tominчто 3 файла обработаны, один не найден, один не того формата.3 типа исключения и секции. Что сложного?
а куда список правильно обработанных? В конструктор исключения?
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748966
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВ стримы не воткнёшь, а значит "больше кода".
В soap, http, асинхронность, потоки не воткнуть, но все равно - не велика потеря)
...
Рейтинг: 0 / 0
25 сообщений из 190, страница 3 из 8
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему NullPointerException не проверяемое исключение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]