假设,我有一个返回 Result 类实例的方法:
public class Result {
pubilc InputStream content;
public long contentLength;
}
我想使用这个 InputStream 安全地工作,但显然,由于 Result 不会强制关闭 Closeable,我不能只写这样的东西:
try (Result result = getResult()) {
...
}
一种可能的解决方案是使结果可关闭:
public class Result implements Closeable {
public InputStream content;
public long contentLength;
@Override
public void close() throws IOException {
content.close();
}
}
...
// this should work now
try (Result result = getResult()) {
...
} catch (IOException) {
...
}
但是如果我不能修改 Result(或不想)怎么办?
另一种方法是手动调用 close() ,但它有点笨重:
Result result = null;
try {
result = getResult();
...
} catch (...) {
...
} finally {
if (result != null) {
result.content.close();
}
}
我也想过这样的事情:
Result result = getResult();
try (InputStream stream = result.content) {
...
}
但是如果 getResult() 抛出异常,它就会失败。
所以我的问题是:在这种情况下还有其他选择吗?
小怪兽爱吃肉
长风秋雁
相关分类