DrNefario
@DrNefario
Пришел, увидел, решил!

Java Exceptions. Что делать с большим количеством исключений?

Приветствую!

Допустим, у меня есть приложение с консольным вводом/выводом. Пользователь может вводить команды, а программа, в случае каких-то неверных действий юзера, подсказывает решение данной проблемы (checked exceptions).

Пусть пользователь повзаимодействовал с консолью и вызвал метод:

public String foo() throws BlaBlaException, BlaFooException, FooFooExcpetion, InfinityException { // и так может очень много
    //bla bla
    throw new BlaBlaExcpetion();
    //. . . 
    // bla bla
    throw new InfinityException();
}


Представим, что все эти исключительные ситуации должен обработать сам пользователь. То есть, найдется в коцне концов уровень, который перехватит исключения и поможет юзверу.

Из примера метода видно, что здесь перебрасывается 4 исключения (throws ...) , и это уже немного глаза режет программисту. А если представить, что этих исключений будет не 4, а 10! А еще уровней перебрасывания будет штук 4-5! Это уже каким-то говнокодом попахивает... Или я не прав?

Это нормальная практика или есть иной подход к этому?

P.S. Знаю, что можно сделать одного предка для всех этих исключений, засунуть в него string с объяснением проблемы и перебросить его. Но что потом? Мне придется через switch все случаи рассматривать...
  • Вопрос задан
  • 357 просмотров
Решения вопроса 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
На разных логических уровнях можно (и нужно) делать re-throw более общих типов исключений (с ссылкой на оригинал внутри), если нет возможности их обработать на месте. Например, TooLongNameException и NegativePriceException где-то выше станут ModelValidationException, т.е. там вам достаточно знать, что модель кривая, вне зависимости от того, по какой причине это произошло.

Может быть пример не самый удачный, ибо здесь наследование бы подошло. А вообще, большой список исключений - это косвенный признак того, что метод слишком много делает (S - SOLID).
Ответ написан
Комментировать
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Допустим, у меня есть приложение с консольным вводом/выводом. Пользователь может вводить команды, а программа, в случае каких-то неверных действий юзера, подсказывает решение данной проблемы (checked exceptions).

Нет. Если пользователь может что-то сделать в вашем приложении - значит это нормально для вашего приложения. Нормально - значит не исключительно. Использовать исключения для управления потоком выполнения приложения - очень плохая идея. Исключения дороги.
Проверяемые исключения нужны для того, чтобы заставить разработчика обработать исключительную ситуацию (ошибку).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@tapokshot
Так обработай их сразу в этом методе ).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект