Плохая обработка исключений для покемонов.Особенно, если это пустой блок, и вы просто глотаете их.У вас есть специально типизированные исключения по той причине, что они на самом деле означают конкретные вещи в определенных контекстах (по сути, они говорят вам, что пошло не так).Итак, поймав Exception
, вы говорите, что вам все равно, что это за исключения, и что вам все равно, что произошло.Вероятно, это не то, что вам нужно.
В общем, при отлове исключений следуйте этим правилам:
- Имеет ли смысл обрабатывать исключение на этом уровне?Если да, то справиться с этим.Если нет, то распространяйте.
- В сочетании с первым правилом «обработка» также может означать «отлов», «обертывание» и «повторное выбрасывание».Это способ предотвратить утечку абстракции, так что вызывающие вас методы не должны знать о базовой реализации.
- Пустой блок catch не означает, что вы обработали исключение.Это называется "глотание";по крайней мере, вы хотите записать исключение.Иногда происходящее исключение на самом деле является частью логического потока вашего кода, и поэтому вы можете захотеть сделать что-то особенное (но это, простите за каламбур, скорее исключение, чем правило. Лучше проверять ситуации, которые вызывают исключения).вместо того, чтобы включать их в логический поток вашего кода).
Вы можете легко проверить наличие нулевого значения в вашем коде, поэтому нет необходимости явно перехватывать исключение нулевого указателя.Нет смысла позволять NullPointerException
случаться (и это плохая практика).Даже если у вас есть какой-то код, который выдает NullPointerException
, и это код, который вы не контролируете и не можете исправить, вы должны определить входные параметры, которые вызывают NullPointerException
, и специально проверить их.
Другое исключение, которое вы не должны ловить, - IllegalArgumentException
.Это исключение означает, что вы передали аргумент, который не имеет смысла.Вместо того, чтобы перехватывать это исключение, вы должны явно проверить свои входные параметры, чтобы убедиться, что они нормальные и не могут вызвать IllegalArgumentException
.