Как лучше всего поймать исключение IllegalArgumentException - PullRequest
9 голосов
/ 22 января 2010

Когда было бы наилучшим образом использовать этот тип исключения и правильно ли он обрабатывался, если попадал в улов, например, так?

catch(Exception e)

Или это нужно явно перехватить?

catch(IllegalArgumentException e)

Ответы [ 4 ]

13 голосов
/ 22 января 2010

Это будет поймано первым - но также и куча других исключений. Вы не должны ловить больше, чем вы действительно хотите.

Второй вариант лучше, если у вас действительно есть , чтобы поймать его ... но обычно , это указывает на ошибку в вызывающем коде. Иногда это случай, когда другой метод выше, не проверяющий его аргументы и т. Д. В идеальном мире, каждый раз, когда выбрасывается IllegalArgumentException, у вызывающей стороны должен быть способ проверить значение перед передачей или вызвать версию, которая не будет исключительным образом (например, шаблон TryParse в .NET, который по общему признанию сложнее в Java без параметров out). Это не всегда так, но всякий раз, когда вы получаете IllegalArgumentException, стоит проверить, можете ли вы избежать этого, проверив значения перед вызовом метода.

7 голосов
/ 22 января 2010

Вы не должны обрабатывать исключение IllegalArgumentException. Очень важно сообщить разработчику, что он вызвал метод с неправильными аргументами. Решение состоит в том, чтобы вызвать метод с другими аргументами.

Если вы должны поймать его, вы должны использовать

catch(IllegalArgumentException e)
3 голосов
/ 22 января 2010

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

0 голосов
/ 22 января 2010

Это действительно зависит от конкретного случая, либо является правильным само по себе. Не сужая объем вопроса, немного сложно привести пример «наилучшего использования».

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