Java应用程序中的Global Catch子句

时间:2019-05-11 13:26:10

标签: java exception

我在dao文件中有几种与DB operations相关的方法。

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();
 }

我能够在Error上显示对话框消息,但想在一个地方而不是每个catch clause上进行处理,就像

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

放在try块的每个catch子句的一个位置。

1 个答案:

答案 0 :(得分:0)

这里有很多方法可能会有所帮助。

    来自Lombok
  • @SneakyThrows将允许在没有catch块的情况下抛出已检查的异常;
  • 如果所有数据访问活动都在自定义线程中发生,则可以在Thread.UncaughtExceptionHandler中处理所有未捕获的运行时异常;
  • 方面可能会有所帮助,请参阅this article;
  • 大多数框架都有其自己的异常处理机制,例如here是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;
    }
}