Предложение Global Catch в Java-приложении - PullRequest
0 голосов
/ 11 мая 2019

У меня есть пара методов в dao файле, связанном с DB operations .like

public int addStudent(Student student) throws MyAppException, SQLException {
 // adding student in db
 }

И в моем controller я использую как

 try{
  myObj.addStudent(student);
 }catch(Exception e){
    Alert alert = new Alert(AlertType.ERROR, e.getMessage());
    alert.showAndWait();
 }

IЯ могу показывать диалоговые сообщения на Error, но хочу обрабатывать в одном месте вместо каждого catch clause, что-то вроде

  public void myGlobalCatchhandler(Exception e){
    Alert alert = new Alert(AlertType.ERROR, e.getMessage());
    alert.showAndWait();
}

в одном месте, вставленном в каждое предложение catch блока try.

1 Ответ

0 голосов
/ 11 мая 2019

Есть много подходов, которые могут помочь здесь.

  • @SneakyThrows из Lombok позволит генерировать отмеченные исключения без блока catch;
  • Если все действия по доступу к данным происходят в пользовательских потоках, вы можете обработать все необработанные исключения времени выполнения в Thread.UncaughtExceptionHandler;
  • Аспекты могут сильно помочь, см. эту статью ;
  • Большинство фреймворков имеет собственный механизм обработки исключений, например здесь - учебник по Spring Framework;
  • Если все предыдущие случаи делают для вас много дополнительной работы, я бы предложил просто извлечь всю логику обработки исключений в отдельный метод и каждый раз использовать ее в блоке catch;
  • Если вы действительно ненавидите try-catch, вы можете ввести какой-нибудь метод-обертку, например:
@FunctionalInterface
interface DatabaseAction<T> {
    T execute() throws MyAppException, SQLException;
}

<T> T performDatabaseAction(DatabaseAction<T> action) {
    try {
        return action.execute();
    } catch (MyAppException | SQLException e) {
        Alert alert = new Alert(AlertType.ERROR, e.getMessage());
        alert.showAndWait();
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...