我在AutoCloseable
块中创建了数量不定的try-with-resources
对象。在任何退出点,我都希望所有分配的资源都关闭。
我可以想象自己编写一些东西来执行此操作,但是是否存在类似于Python's contextlib.ExitStack的现有实用程序将关闭分配的资源?我希望它看起来像这样:
try (ExitStack exitStack = new ExitStack()) {
List<Widget> widgets = new ArrayList<>();
for (...) {
widgets.add(exitStack.add(new Widget()));
}
// use widgets
}
(注意:这不是this question,因为我不知道我会提前拥有多少资源。
嘿,亲密的选民我不是要图书馆,而是问你如何完成安全关闭动态数目的
AutoCloseable
的任务,如果有语言功能,很好,如果有标准库功能,也很棒,如果我必须自己写,还可以。如果您想推荐一个常用的第三方库,请确保其中包含该库。 最佳答案
我想您会在这里找到Guava的 Closer
类:
try (Closer closer = Closer.create()) {
InputStream in1 = closer.register(new FileInputStream("foo"));
InputStream in2 = closer.register(new FileInputStream("bar"));
// use in1 and in2
}
// in2 and in1 closed in that order
该 class 仍被标记为Beta,请注意,但似乎仍然存在。最初的目的是在没有Java 7语言功能支持的情况下提供尝试资源的体验,但是有用的副作用是,它应该使用动态数量的资源。