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

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

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

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

61
задан Pentium10 25 March 2010 в 17:46
поделиться

5 ответов

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

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

90
ответ дан 24 November 2019 в 17:18
поделиться

Как насчет IllegalStateException ?

5
ответ дан 24 November 2019 в 17:18
поделиться

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

4
ответ дан 24 November 2019 в 17:18
поделиться

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

3
ответ дан 24 November 2019 в 17:18
поделиться

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

1
ответ дан 24 November 2019 в 17:18
поделиться
Другие вопросы по тегам:

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