Проверенный эквивалент IllegalArgumentException?

У меня есть метод, который берет перечисление в качестве параметра и возвращает некоторую информацию, зависящую от того параметра. Однако то перечисление содержит некоторые значения, которые не должны быть обработаны и должны повысить состояние ошибки. В настоящее время метод бросает IllegalArgumentException, но я хотел бы, чтобы это было контролируемой исключительной ситуацией, чтобы вынудить вызывающие стороны поймать его (и возвратиться корректно, регистрируя ошибку). Там что-то подходит, или я должен создать свой собственный подкласс Исключения?

Я открыт для других шаблонов также. Разумная реакция состояла бы в том, что все значения перечисления должны быть обработаны, но это не имеет место. Когда новое значение добавляется к перечислению, я хочу удостовериться, что этот метод делает правильную вещь - предупреждение человека предпочтительно для использования некоторого возвращаемого значения по умолчанию в этом случае.

Спасибо за любой совет.

19
задан user296692 18 March 2010 в 16:32
поделиться

2 ответа

Вопросы следующие:

  • насколько «нормальными» являются случаи, когда метод вызывается с неподходящим параметром перечисления?
  • можно ли аккуратно обработать эти случаи, а затем продолжить обработку?

Из того, что вы описываете, это не является «нормальным» (происходит только тогда, когда добавляется новое значение перечисления, а метод не обновляется должным образом - т.е. когда была введена ошибка). Так что для меня это больше похоже на случай RuntimeException (т.е. не отмечен). Вызывающие этот метод все еще могут поймать непроверенное исключение, если они действительно этого хотят, но они не обязаны это делать.

OTOH Я бы попытался исключить описанный вами случай, переместив данные, возвращаемые вашим методом, прямо внутрь перечисления. Таким образом, всякий раз, когда добавляется новое значение перечисления, невозможно забыть соответствующие данные.

Если вам интересно, вы можете проверить это руководство .

3
ответ дан 30 November 2019 в 05:21
поделиться

Вы можете создать собственное проверенное исключение (например, UnhandledEnumType) или перехватить и обработать IllegalArgumentException. Это звучит немного подозрительно, что нужно обрабатывать только некоторые значения перечисления. Одна из целей перечисления - привязать значения к определенному набору значений, и я ожидаю, что все они будут обработаны. Если вы беспокоитесь о добавлении новых, у вас должен быть тест, который проверяет, что все значения обрабатываются должным образом (с помощью метода values ​​() перечисления, чтобы убедиться, что все они проверены).

4
ответ дан 30 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: