【发布时间】:2019-09-16 05:09:43
【问题描述】:
我正在try-with-resources 块中创建数量不定的AutoCloseable 对象。在任何退出点,我都希望关闭所有分配的资源。
我可以想象自己编写一些东西来执行此操作,但是是否存在类似于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,因为我不知道我会提前多少资源。
Hey close voters 我不是要图书馆,我要问的是,如果有语言功能,你将如何安全地关闭动态数量的AutoCloseables 的任务很好,如果有标准库函数,也很好,如果我必须自己编写,很好。如果你喜欢推荐一个常用的第三方库,里面有这个,那么当然。
【问题讨论】:
-
你怎么会不知道你将在多少资源中编程?
-
@Frontear 文件名、IP 地址等列表,作为输入。
-
为什么不在for循环中使用
try-with-resources? -
@lealceldeiro 假设我需要它们同时打开。我可以更新以使其更清晰。
-
我不知道任何提供该功能的内置类。但是实现
ExitStack之类的东西应该不会那么难,因为它可能只包含AutoCloseables的集合,然后在自己的close()方法中关闭它们(使用简单的循环并捕获每个元素的异常)。跨度>
标签: java java-8 try-with-resources autocloseable