У меня есть вариант использования, когда я хочу обработать список элементов. Обработка не является атомарной, и для некоторых элементов в списке она может быть выполнена успешно, а для некоторых других элементов может произойти сбой. Я хочу сообщить пользователям API, что для некоторых элементов в списке обработка не удалась. У меня есть 3 варианта:
Вернуть список с успешно выполненными элементами
Вернуть список с элементами, которые не удалось
Выбросить исключение, говорящее о том, что некоторые элементы не удались
Если я выберу третий подход и все же хочу, чтобы клиенты знали элементы, обработка которых не удалась, могу ли я добавить список в класс исключений, чтобы клиенты читали этот список, когда они получают исключение? Это целесообразно? Можно ли здесь что-то еще сделать?
Класс исключения будет выглядеть следующим образом:
@Getter @Setter
public class SomeProcessingException extends Exception {
private static final long serialVersionUID = 1L;
private List<SomeItem> failedItems;
public SomeProcessingException(String message) {
super(message);
}
}
@Deadpool Я понимаю, что это основано на моем требовании. Я просто хочу знать, есть ли что-то не так с этим




Да, вы можете расширить Exception и добавить List неудачных элементов, как вы уже делали.
Для части:
still want to let the clients know the items for which the processing failed
Что для вас клиент? Конечный пользователь? Или программист, использующий вашу библиотеку? Администратор?
Если это программист, то он может поймать ваш SomeProcessingException и получить от него список неисправных элементов.
Если это конечный пользователь, просматривающий журналы (например, администратор), вы должны переписать метод toString для SomeProcessingException.
Если это конечный пользователь, использующий клиент (браузер, телефон Android, настольное приложение...), вы должны перехватить SomeProcessingException и показать всплывающее окно или подобное, извлекая из него неудавшиеся элементы.
Многие стандартные исключения предлагают доступ к своим внутренним свойствам, которые могут использоваться при использовании класса, например, URISyntaxException имеет метод getIndex() для:
Returns an index into the input string of the position at which the parse error occurred, or -1 if this position is not known.
Точно так же SQLException имеет метод getErrorCode для:
Retrieves the vendor-specific exception code for this SQLException object.
Клиентами для меня будут пользователи моей библиотеки. Так что это осуществимо для меня. Причина, по которой я задал этот вопрос, заключалась в том, что я никогда не видел, чтобы какой-либо код выполнял такую обработку.
@MohamedShakeel может получить эту информацию, и многие стандартные исключения обрабатывают ее. Это программист решает, использовать его или нет. (Проверьте обновленный ответ)
Это не ТАК вопрос, он основан на вашем требовании