【发布时间】:2015-10-14 06:44:31
【问题描述】:
我见过java7 try-with-resources。如果可关闭的资源是作为参数来的,我们不需要声明资源。对于这种情况我们如何使用这个功能?
public static void write(byte[] b, OutputStream os) throws Exception {
try {
os.write(b);
}
catch(Exception e) {
logger.log(Level.INFO, "Exception in writing byte array");
}
finally {
try {
if(os != null) {
os.close();
}
}catch(Exception e) {
logger.log(Level.INFO, "Exception while close the outputstream");
throw e;
}
}
}
【问题讨论】:
-
附注:关闭流通常是打开流的实体的责任。您接受开放流并在返回之前将其关闭似乎很奇怪。 (如果我想使用您的方法将内容写入文件,然后在您的内容后附加其他内容怎么办?)
-
如果你真的想这样做,你可以简单地做
try (OutputStream os2 = os) { ... } -
就我而言,我确信我不会在之后附加内容。我将这段代码作为实用方法编写。
-
它是否是内部方法并不重要。无论如何,这都是糟糕的设计。如果你设计得当,很明显如何使用资源尝试:你只需做
try (FileWriter fw = new FileWriter("foo")) { write(b, fw); }。 -
我回应@aioobe 所说的,我刚刚在这里stackoverflow.com/a/33117857/3788176 提出了同样的观点,关闭其他人的流是问题的原因。如果您必须关闭该方法中的流,我会调用方法
writeAndCloseStream以明确该方法中的流会发生什么。
标签: java try-catch java-7 try-with-resources