Java 在独立方法中处理异常以提高可读性

Java 在独立方法中处理异常以提高可读性,java,exception,anti-patterns,software-quality,Java,Exception,Anti Patterns,Software Quality,在单独的方法中处理异常是一种反模式吗 假设我有一个方法执行一些低级IO并可能抛出IOException,我有一个方法foo(),它多次调用低级IO方法。在第三种方法中执行异常处理是否有意义,如下所示: public void foo() throws MyCheckedException { // some stuff goDoSomeIO(path1) // some other stuff goDoSomeIO(path2) // some

在单独的方法中处理异常是一种反模式吗

假设我有一个方法执行一些低级IO并可能抛出IOException,我有一个方法foo(),它多次调用低级IO方法。在第三种方法中执行异常处理是否有意义,如下所示:

 public void foo()  throws MyCheckedException {
     // some stuff
     goDoSomeIO(path1)
    // some other stuff
     goDoSomeIO(path2)
    // some more stuff
     goDoSomeIO(path3)

  }

 private String goDoSomeIO(String filePath) throws MyCheckedException {
     try {
         doSomeIO(filePath);
     } catch (IOException ioe) {
         LOG.error("Io failed at: " + filePath);
         throw new MyCheckedException("Process failed because io failed", ioe)
     }
  }

 private String doSomeIO(String filepath) throws IOException {
        //io stuff
  }

我发现这比doSomeIO方法自己进行异常处理,或者异常处理发生在foo中时可读性更好

捕获[checked]异常的一般规则是,当您可以从发生的“异常”情况中恢复时执行此操作。如果您无法从这里的异常中恢复,请让它冒泡到可以恢复的级别。例如,通知用户所选文件不可读,并允许用户再次选择文件。或者在实际请求的页面不存在时向请求者发送404“页面”

此规则的一个常用异常是捕获、执行一些琐碎的非恢复工作(如日志记录)并重新显示异常(可能已包装)。我看你的方法没有错


实际上,向异常添加额外细节并重新引用它是一种专业模式。

我经常看到代码在较高级别上处理较低级别方法的异常,而不管较低级别只是一个或多个方法


这是很常见的,并且是由于分离的考虑:低级人员负责推送文件,高级人员捕获异常以确定复杂操作是否有效。我不认为将IO处理和IO处理放在不同的方法中有什么不对。(我试着给他们起个名字,这就解释了目的。我不是goDoWhatever&doWhatever的粉丝)

这是风格的问题,取决于具体情况。对不起,Ops读得太快了。我刚刚看到了日志。将编辑我的答案。谢谢,+1“给它一个解释目的的名称”。