gpt4 book ai didi

java - 在 try-with-resources 中关闭动态数量的 AutoCloseable 对象

转载 作者:行者123 更新时间:2023-12-02 09:49:10 27 4
gpt4 key购买 nike

我正在 try-with-resources block 中创建可变数量的 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 因为我不知道我会提前拥有多少资源。

嘿,亲密的选民我不是在要求一个库,我是在问你如何完成安全关闭动态数量的 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 语言功能支持的情况下提供尝试资源体验,但一个有用的副作用是它应该使用动态数量的资源。

关于java - 在 try-with-resources 中关闭动态数量的 AutoCloseable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871799/

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