У меня есть функция, которая петляет, делая что-то, что может вызвать исключение. Выглядит примерно так:
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
Ошибка, вызывающая исключение, восстанавливается. Это может быть что-то вроде ошибки SQL в одном операторе обновления, где цикл while выполняет серию операторов обновления. Или ошибка синтаксического анализа в одном фрагменте данных, где цикл обрабатывает несколько фрагментов данных. Мне нужно передать исключение дальше по цепочке, так что часть GUI программы может обрабатывать ее, обрабатывать и передавать ошибку пользователю. Но я не хочу убивать цикл в этой конкретной функции. Другие вещи, которые он делает, могут быть недействительными. Ошибка, вызвавшая это исключение, может не оказаться фатальной для функции.
Итак, мой вопрос таков: Является ли приемлемой практикой создание связанных списков пользовательских исключений (где каждое исключение - node, а исключение - глава списка), а затем бросать голову списка (если есть) после завершения цикла?
Кто-нибудь когда-либо видел это? Может ли кто-нибудь думать о каких-либо потенциальных проблемах с этим? Может ли кто-нибудь подумать о других, более эффективных способах устранения проблемы с корнем: необходимо ли передавать несколько несвязанных исключений без выхода из функции до тех пор, пока она не будет выполнена?
Вот пример того, как ссылка и бросок могут быть реализованы очень просто:
public void myFunction() throws MyException {
MyException head = null;
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
MyException tmp = new MyException(some, stuff, of, mine, ex);
tmp.next(head);
head = tmp;
}
}
if(head != null)
throw head;
}