Какое исключение выбрасывать, если отсутствует важный параметр / зависимость? - PullRequest
59 голосов
/ 25 марта 2010

Возьми этот метод

/**
 * @return List of group IDs the person belongs to
 *
 */
public List<String> getGroups() {
    if (this.getId().equals("")) return null;
}

Я хотел бы выдать исключение, вместо того чтобы возвратить ноль, что за исключение выдать, если важный параметр / зависимость не был установлен?

Ответы [ 6 ]

83 голосов
/ 25 марта 2010

Я бы использовал IllegalArgumentException, если параметр / аргумент контролируется извне, или IllegalStateException, если метод вызывается в неправильный момент (состояние). В вашем конкретном случае я думаю, что это последнее. (Сомнительная) альтернатива: NullPointerException.

Однако это должно быть явно задокументировано в @throws, чтобы пользователь понимал причину.

5 голосов
/ 25 марта 2010

Как насчет IllegalStateException ?

3 голосов
/ 25 марта 2010

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

3 голосов
/ 25 марта 2010

Я бы использовал исключение IllegalStateException, потому что идентификатор - это состояние владельца. Если бы идентификатор передавался как параметр, исключение IllegalArgumentException было бы правильным.

2 голосов
/ 08 августа 2017

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

1 голос
/ 25 марта 2010

Я бы создал свой собственный тип Exception, расширив Exception. Таким образом, вызывающие функции могут перехватить это конкретное исключение и обработать его соответствующим образом. Обратите внимание, что вы можете сделать то же самое практически со всем, что расширяет Exception, но я предпочитаю создавать свои собственные классы Exception, чтобы я мог быть очень надежным в обработке своих исключений. Это, конечно, зависит только от вас.

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