Как справиться с ошибкой в ​​этом случае? Исключениями или логическим или что-то еще - PullRequest
2 голосов
/ 25 апреля 2010

Я пытаюсь создать класс ответа в Java, который имеет метод

void setResponse (String response);

Различные подклассы ответа будут иметь разные требования к ответу. Строка, переданная функции, получена от пользователя.

Как правильно обрабатывать неправильный ответ?

  1. Должна ли функция вызывать исключение, подобное IllegalResponseException
  2. Должна ли функция быть объявлена ​​как

    логический setResponse (строковый ответ, строковая ошибкаMsg)

и вернуть false, если ответ неправильный, и установить для сообщения об ошибке соответствующее значение

Edit: Я хочу спроектировать пользовательский интерфейс так, чтобы я продолжал запрашивать у пользователя ответ, пока не будет введен правильный.

Ответы [ 5 ]

2 голосов
/ 25 апреля 2010

Резервные исключения для исключительных обстоятельств.

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

1 голос
/ 25 апреля 2010

Второй вариант исключен, поскольку String в Java является неизменным. Если вы думаете, что вы можете сделать errorMsg = "Wrong response!" и иметь это, то вам нужно сделать шаг назад и прочитать кое-что о том, что значит String быть неизменным, и что означает, что Java передает все ссылки значение.

Для первого варианта есть IllegalArgumentException, который часто используется для этой цели, так что вы можете использовать его вместо собственного пользовательского класса исключений. Это extends RuntimeException, то есть исключение не проверено .

1 голос
/ 25 апреля 2010

Это в некоторой степени зависит от того, что вы хотите, чтобы программа делала, когда задан неправильный ответ.

Если это на 100% критично, и программа никогда не должна работать в таком случае, выведите исключение.

Если вызывающая сторона должна правильно обработать ее и продолжить выполнение программы, вы можете сделать любую из них, но я лично предпочитаю # 2. Почему?

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

0 голосов
/ 25 апреля 2010

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

0 голосов
/ 25 апреля 2010

Я не понимаю, как String может иметь неправильное значение, особенно если оно передано в функцию установки. Таким образом, вам, вероятно, следует использовать исключение и, возможно, выдать его, когда используется [неправильная] строка, а не установлена.

Вероятно, установщик также не несет ответственности за создание строки сообщения об ошибке. Я хотел бы рассмотреть возможность возврата более компактной информации об ошибках (например, логическое или перечисление или даже класс, если ошибка должна содержать много деталей) и расширить ее в другом классе.

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