Какое исключение бросать, когда отсутствует важный параметр/зависимость?
Возьмем этот метод
/**
* @return List of group IDs the person belongs to
*
*/
public List<String> getGroups() {
if (this.getId().equals("")) return null;
}
Я хотел бы исключить исключение вместо null, что исключение выбрасывать, когда важный параметр/зависимость не был установлен?
Ответы
Ответ 1
Я бы использовал IllegalArgumentException
, если параметр/аргумент управляется извне или IllegalStateException
, если метод вызван только в неправильный момент (состояние). В вашем конкретном случае я думаю, что это последнее. Альтернативой (сомнительной) является NullPointerException
.
Однако это должно быть явно задокументировано в @throws
, чтобы пользователь понял причину.
Ответ 2
Как насчет IllegalStateException?
Ответ 3
Если его невозможно гарантировать, что идентификатор всегда задан (например, требуя его в конструкторе, где вы можете проверить, что действительный идентификатор был передан), то я думаю, что другие предложения бросить IllegalStateException являются правильными. Но было бы лучше попробовать и убедиться, что ваш объект не сможет попасть в это состояние в первую очередь, если это вообще возможно.
Ответ 4
Я бы использовал исключение IllegalStateException, потому что id - это состояние владельца. Если идентификатор прошел бы как параметр, исключение IllegalArgumentException было бы правильным.
Ответ 5
Вместо того, чтобы бросать исключение, вы должны просто вернуть пустой список. Если параметр зависимости/не выполняется, то результатов нет. Из комментариев и кода, опубликованных, похоже, что это ожидаемое поведение. Если идентификатор пуст, то нет присоединенных групп, таким образом, пустой список.
Ответ 6
Я бы создал свой собственный тип исключения, расширив Exception. Таким образом, вызывающие функции могут поймать это конкретное Исключение и обработать его изящно, если это необходимо.
Обратите внимание: вы можете сделать то же самое, что и все, что расширяет исключение, но я предпочитаю создавать свои собственные классы исключений, чтобы я мог быть очень уверенным в обработке исключений. Это, конечно, зависит от вас.