Try-catch призван помочь в обработке исключений. Это как-то означает, что это поможет нашей системе быть более устойчивой: попытаться восстановиться после неожиданного события.
Мы подозреваем, что что-то может произойти при выполнении команды и инструкции (отправке сообщения), поэтому оно включается в попытку. Если случается что-то почти неожиданное, мы можем что-то сделать: мы пишем улов. Я не думаю, что мы позвонили, чтобы просто зарегистрировать исключение. Мне кажется, что блок catch предназначен для того, чтобы дать нам возможность восстановления после ошибки.
Теперь, допустим, мы оправились от ошибки, потому что мы могли исправить то, что было не так. Это может быть супер приятно повторить попытку:
try{ some_instruction(); }
catch (NearlyUnexpectedException e){
fix_the_problem();
retry;
}
Это быстро попадет в вечный цикл, но допустим, что fix_the_problem возвращает true, а затем мы повторяем попытку. Учитывая, что в Java такого нет, как бы ВЫ решили эту проблему? Какой ваш лучший дизайнерский код для решения этой проблемы?
Это похоже на философский вопрос, учитывая, что я уже знаю, что то, что я спрашиваю, напрямую не поддерживается Java.
remove()
из того java.util.Queue
, что теряет и InvalidElementException
когда очередь пуста. Вместо того, чтобы спрашивать, пусто ли оно, я перебираю действия в try-catch (что при параллельности становится обязательным даже при предыдущем if). В таком случае в catch
блоке я бы попросил пополнить очередь большим количеством элементов, а затем повторить попытку. Вуаля.