gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:11 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com