0

是否有一些库可以提供围绕 java io 的包装器,允许不捕获所有异常,以使代码更清晰、更易于理解。

假设我不想拥有这个:

public void loadSomething(InputStream in) throws SomeCheckingException {

   BufferedReader reader = getReader(in);

    try {
      someId = reader.readLine();
      ...

    } catch(IOException ex) {
      ...        
    } finally {
        try {
        reader.close();
        } catch(Exception ex) {
        ...
        } 
    }
 }

我宁愿有这个:

public void loadSomething(InputStream in) throws RuntimeException {

 someId = getReader(in).readLine();

}

该库将处理 getReader 内部的异常并关闭inputstream,将一些错误放入日志(如果已配置),将异常从方法中抛出给客户端。而客户,如果他愿意,他会处理的。

在客户端:

try {
  loadSomething(...)
} catch(RuntimeException ex) {...}
4

2 回答 2

2

我宁愿有这个:

public void loadSomething(InputStream in) {

    consoleId = getReader(in).readLine();

}

改为这样做:

public void loadSomething(InputStream in) throws IOException {

 consoleId = getReader(in).readLine();

}

检查异常提供了一种确保异常情况得到处理的方法。如果您不想在您的方法中处理它们,只需声明它们需要在调用方法中处理。

如果您真的想掩盖异常,那么当然:

public void loadSomething(InputStream in) {

    try {
        consoleId = getReader(in).readLine(); 
        // ...all of your other code here...
    }
    catch (IOException ioe) {
    }
}

但我强烈建议不要隐藏这样的异常。它通常会导致难以调试的错误。


分别地:

  • 在上拨打close您的Reader电话。由于您无法控制,这不是一个好主意。(是的,这有点棘手。你可以很容易地争辩说,既然你拥有,你应该关闭它。但这并不是这些类的工作方式,无论好坏。)closeInputStreamInputStreamReader
于 2013-05-03T22:00:05.430 回答
1

Apache Commons IO做的事情或多或少像您在 FileUtils 中描述的那样。看看这里的 readLines 方法:

http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/FileUtils.html#readLines(java.io.File)

于 2013-05-03T21:58:58.790 回答