Autocloseable
应始终与 try-with-resources
一起使用.至少 Intellij 检查表明它。
所以,如果我有一个生成 Foo
的代码实现 Autocloseable
我应该这样做:
try (final Foo foo = getFoo()) {
foo.doSomething();
}
但是如果我有返回 Foo[]
的函数呢? ?或者接受 Foo[]
的函数(或 Collection<Foo>
)作为它的论点?
我如何将它与 try-with-resources
一起使用?
查看以下函数:
Foo[] getFoos();
doAll(Foo... foo);
我想做点什么 doAll(getFoos())
我该怎么做?
最佳答案
Try-with-resources 语句只能关闭那些在其 header 中声明和分配的资源。所以唯一的方法是让你正在获取的 Collection 实现 AutoCloseable 或者将它包装到你的 AutoCloseable 扩展中,这样它的 close() 方法将被 T-W-R 调用。喜欢:
try (SomeAutoCloseableCollction col = getAutoCloseables()) {
System.out.println("work");
} //col.close() gets called
对于一个数组,恐怕没有办法,因为你不能扩展它并让它实现一些接口(interface)。
如果您要自己关闭 Collection ,可以查看Apache Drill项目与类(class) org.apache.drill.common.AutoCloseables
- 它就是这样做的,它自己关闭了很多 AutoCloseables。
关于java - Java8中 "Autocloseable"的数组或集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016827/