java - Java8中 "Autocloseable"的数组或集合

标签 java java-8 try-with-resources autocloseable

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/

相关文章:

java - Hibernate 3 Composite key one with GeneratedValue

java - JComboBox 中每个项目的多种颜色

java - 匿名 block 就像静态 block 一样

java - 如何用函数式风格的表达式替换 if(Optional.isPresent())

java - 文件处理的资源泄漏,try with resources VS try-catch-finally with file.close()

java - Android 尝试使用资源未找到方法 close()

java - 如何强制构造函数定义

java - 如果 Java 8 样式中存在值,如何从 HashMap 中删除

java - Java 8 的 Maven 错误

java.nio.file.FileSystemException :/proc: Too many open files