包装java io以不强制客户端使用异常检查的库
是否有一些库可以提供java io的包装器,允许不捕获所有异常,从而使代码更干净、更易于理解 比如说,我不想这样:包装java io以不强制客户端使用异常检查的库,java,exception,Java,Exception,是否有一些库可以提供java io的包装器,允许不捕获所有异常,从而使代码更干净、更易于理解 比如说,我不想这样: public void loadSomething(InputStream in) throws SomeCheckingException { BufferedReader reader = getReader(in); try { someId = reader.readLine(); ... } catch(IOExcept
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();
}
public void loadSomething(InputStream in) {
consoleId = getReader(in).readLine();
}
我更喜欢这个:
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();
}
public void loadSomething(InputStream in) {
consoleId = getReader(in).readLine();
}
此库将在getReader内处理异常,并将关闭inputstream
,将一些错误放入日志(如果已配置),将异常从方法中抛出到客户端。如果客户愿意,他会处理的
在客户机上:
try {
loadSomething(...)
} catch(RuntimeException ex) {...}
做一些或多或少像您在FileUtils中描述的事情。请在此处查看readLines方法:
做了一些或多或少像您在FileUtils中描述的事情。请在此处查看readLines方法:
我更喜欢这个:
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();
}
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
InputStream上的
。因为您不能控制close
,所以这不是一个好主意。(是的,这有点棘手。你可以很容易地说,既然你拥有输入流
,你就应该关闭它。但不管好坏,这些类都不是这样工作的。)阅读器
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();
}
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
InputStream上的
。因为您不能控制close
,所以这不是一个好主意。(是的,这有点棘手。你可以很容易地说,既然你拥有输入流
,你就应该关闭它。但不管好坏,这些类都不是这样工作的。)阅读器
IOException
时,客户端如何抛出异常?还要注意,您的第一位代码甚至无效-您不能在最后一个块之后放置catch
块。如果您想让类更易于阅读,只需更改方法头,使其包含一个抛出
。然后在使用它的代码中包含try catch
。您考虑过使用该语句吗?这样做将大大减少第一个方法的体积。如果该方法采用流作为参数,通常不应关闭它。让溪流的开启者关闭它。由于调用者打开了流,它可能已经处理了IOException,因此您只需从该方法中抛出IOException,并让调用者处理IOException客户端如何抛出异常,当它出现时,没有声明抛出IOException
?还要注意,您的第一位代码甚至无效-您不能将catch
块放在finally
块之后。如果您想使类更易于阅读,只需更改方法头,使其包含throws
。然后在使用它的代码中包含try catch
。您考虑过使用该语句吗?这样做将大大减少第一个方法的体积。如果该方法采用流作为参数,通常不应关闭它。让溪流的开启者关闭它。由于调用方打开了流,它可能已经处理了IOException,所以您只需从这个方法中抛出IOException,并让调用方处理IOExceptionRows IOException=throwsRuntimeException@ses:好吧,如果你想改变问题。。。是的,您可以将所有已检查的异常更改为运行时异常。这是个好主意吗?不知道,你喜欢什么样的大括号放置/代码缩进?(例如,这是一个风格论证。)我会说,不,这是一个糟糕的想法。但那就是我。@ses:不。IOException不是运行时异常。我知道这就是我不想使用它的原因。见我的问题。我最初的问题是使用RuntimeExceptions而不是ChekingExceptions。(我只是在写问题的时候忘记了抛出RuntimeException)这个答案证明了你的代码可以和你在仍然使用IOException时所问的一样短。无论是否选中异常,您都必须在某个地方处理它,并在某个地方关闭流。无论是否检查异常,在同一位置都需要相同的代码。throws IOException=throwsRuntimeException@ses:好吧,如果你想改变问题。。。是的,您可以将所有已检查的异常更改为运行时异常。这是个好主意吗?不知道,你喜欢什么样的大括号放置/代码缩进?(例如,这是一个风格论证。)我会说,不,这是一个糟糕的想法。但那就是我。@ses:不。IOException不是运行时异常。我知道这就是我不想使用它的原因。见我的问题。我最初的问题是使用RuntimeExceptions而不是ChekingExceptions。(我只是在写问题的时候忘记了抛出RuntimeException)这个答案证明了你的代码可以和你在仍然使用IOException时所问的一样短。无论是否选中异常,您都必须在某个地方处理它,然后