Try-catch має допомогти у вирішенні випадків. Це якось означає, що це допоможе нашій системі бути більш надійною: спробуйте відновитися після несподіваної події.
Ми підозрюємо, що може трапитися щось під час виконання та вказівки (надсилання повідомлення), тому воно вкладається в спробу. Якщо трапиться щось майже несподіване, ми можемо щось зробити: пишемо улов. Я не думаю, що ми закликали просто записати виняток. Я вважаю, що блок ловлі має на меті дати нам можливість відновитись після помилки.
Скажімо, ми відновилися після помилки, оскільки ми могли виправити те, що було не так. Було б дуже приємно зробити повторну спробу:
try{ some_instruction(); }
catch (NearlyUnexpectedException e){
fix_the_problem();
retry;
}
Це швидко потрапить у вічний цикл, але скажімо, що fix_the_problem повертає справжнє значення, тоді ми повторимо спробу. Зважаючи на те, що на Java немає такого, як би ви вирішили цю проблему? Який найкращий дизайн-код для вирішення цього питання?
Це як філософське запитання, враховуючи те, що я вже знаю, про що я прошу, не підтримує Java безпосередньо.
remove()
з java.util.Queue
, який шипить і InvalidElementException
коли черга порожня. Замість того, щоб запитувати, чи це порожньо, я розбираю дії в спробі лову (що за умови одночасності стає обов'язковим навіть для попереднього, якщо). У такому випадку в catch
блоці я б попросив поповнити чергу ще кількома елементами, а потім повторити спробу. Вуаля.