Хотя это описывается как очень плохая практика, иногда вы можете найти редких случаев, которые не только полезны, но и обязательны. Вот два примера.
В веб-приложении, где вы должны показать пользователю полную страницу полной ошибки.
Этот код гарантирует, что это произойдет, так как он большой try/catch
вокруг всех ваших обработчиков запросов (сервлетов, действий Struts или любого контроллера ....)
try{
//run the code which handles user request.
}catch(Throwable ex){
LOG.error("Exception was thrown: {}", ex);
//redirect request to a error page.
}
}
В качестве другого примера рассмотрим, есть ли у вас класс обслуживания, который обслуживает перевод средств. Этот метод возвращает TransferReceipt
, если передача выполнена, или NULL
, если не удалось.
String FoundtransferService.doTransfer( fundtransferVO);
Теперь представьте себе, что вы получаете List
денежных переводов от пользователя, и вы должны использовать вышеуказанную услугу, чтобы выполнить их все.
for(FundTransferVO fundTransferVO : fundTransferVOList){
FoundtransferService.doTransfer( foundtransferVO);
}
Но что произойдет, если произойдет любое исключение? Вам не следует останавливаться, поскольку один перевод мог быть успешным, а другой - нет, вам следует продолжать проходить через всех пользователей List
и показывать результат для каждого перевода. Таким образом, вы в конечном итоге с этим кодом.
for(FundTransferVO fundTransferVO : fundTransferVOList){
FoundtransferService.doTransfer( foundtransferVO);
}catch(Throwable ex){
LOG.error("The transfer for {} failed due the error {}", foundtransferVO, ex);
}
}
Вы можете просмотреть множество проектов с открытым исходным кодом, чтобы увидеть, что throwable
действительно кэшируется и обрабатывается. Например, вот поиск по tomcat
, struts2
и primefaces
:
https://github.com/apache/tomcat/search?utf8=%E2%9C%93&q=catch%28Throwable
https://github.com/apache/struts/search?utf8=%E2%9C%93&q=catch%28Throwable
https://github.com/primefaces/primefaces/search?utf8=%E2%9C%93&q=catch%28Throwable