Java 为什么抛出相同的异常而不处理日志结果?

Java 为什么抛出相同的异常而不处理日志结果?,java,exception-handling,error-logging,Java,Exception Handling,Error Logging,在工作中,我的目标是更多地参与代码评审,因为我上的是计算机科学学校,学习了理论等。我的同事都是通过工作提供的课程学习java的,只是编程以获得最终产品,并不总是以最有效的方式 无论如何,我们有一个类,可以让我们的程序访问sql数据库。每个方法都抛出一个DataSourceException。在该方法中,还有一个try-catch-finally来处理SQLException。这句话吸引了我 catch (Exception ex) { final String METHOD_NAME

在工作中,我的目标是更多地参与代码评审,因为我上的是计算机科学学校,学习了理论等。我的同事都是通过工作提供的课程学习java的,只是编程以获得最终产品,并不总是以最有效的方式

无论如何,我们有一个类,可以让我们的程序访问sql数据库。每个方法都抛出一个DataSourceException。在该方法中,还有一个try-catch-finally来处理SQLException。这句话吸引了我

catch (Exception ex) {
      final String METHOD_NAME = "prepare";
      Log.log(MyClass.class, METHOD_NAME, ex);
      throw new DataSourceException(ex);
}
如果方法签名引发另一个DataSourceException,为什么要引发它?不会抛出日志的结果。这意味着我们对包含Log.Log的行不做任何操作:它本质上创建了一个对象,并且从不对它做任何事情?应将其作为DataSourceException参数传递。抱歉,如果这是重复


TL;DR上述代码是反模式代码吗

看起来它的目的是记录异常,然后重新显示它们,以便某些代码必须实际处理它们。

它记录所有异常,并将它们映射到DataSourceException,以便调用方只需要关心一种类型。乍一看,我觉得很好。你说的“从不做任何事”是什么意思?你认为
log()
有什么作用?可能它会将日志条目写入日志文件(如果启用)?这很有道理,公平地说,一开始我觉得没道理。但是第三条线呢?我不确定这个方法对这个结果有什么作用。log()返回一个它不处理的对象。在实际代码中,您不会捕获DataSourceException来抛出新的DataSourceException。捕获异常以抛出一个新的DataSourceExceptionit,然后使用新异常重试。在我看来,更好的方法是不捕获任何异常,无论在哪里捕获dataSourceException,都要捕获所有异常并记录日志,做您需要的任何事情。。因为这是很多不必要的捕获和无理由的重试。但是log()返回一个可丢弃的对象,这应该是作为参数传递的对象吗?在不知道log函数内容的情况下,我希望log可以抛出它自己的错误。理想情况下,使用这些函数的开发人员希望首先看到它们的错误。虽然当错误处理程序出错时会有一些笑声。