Java исключения обработки идиом ... кто прав и как с этим справиться? - PullRequest
7 голосов
/ 04 марта 2009

У меня в настоящее время есть техническая разница со знакомым. В двух словах, это разница между этими двумя основными стилями обработки исключений Java:

Вариант 1 (мой):

try {
...
} catch (OneKindOfException) {
...
} catch (AnotherKind) {
...
} catch (AThirdKind) {
...
}

Вариант 2 (его):

try {
...
} catch (AppException e) {
    switch(e.getCode()) {
    case Constants.ONE_KIND:
    ...
    break;
    case Constants.ANOTHER_KIND:
    ...
    break;
    case Constants.A_THIRD_KIND:
    ...
    break;
    default:
    ...
    }
}

Его аргумент - после того, как я использовал обширные ссылки о проверке пользовательского ввода, обработке исключений, утверждениях и контрактах и ​​т. Д. Для подтверждения своей точки зрения - сводился к следующему:

"Это хорошая модель. Я использовал ее с тех пор, как я и мой друг придумали ее в 1998 году, почти 10 лет назад. Посмотрите еще раз, и вы увидите, что мы пошли на компромиссы с академическими аргументами иметь много смысла. "

Есть ли у кого-нибудь аргумент о том, почему вариант 1 - это путь?

Ответы [ 11 ]

0 голосов
/ 04 марта 2009

Я бы поддержал вариант 2, если бы это было:

default:
  throw e;

Это немного более уродливый синтаксис, но возможность выполнения одного и того же кода для нескольких исключений (т.е. случаев подряд) намного лучше. Единственное, что могло бы меня раздражать, - это создание уникального идентификатора при создании исключения, и система, безусловно, могла бы быть улучшена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...