【发布时间】:2017-12-04 05:33:40
【问题描述】:
我有一个Map<Key, Closeable>,如果从地图中删除了一个键,我想关闭Closeable。通常我有类似的东西:
Closeable c = map.remove(key);
c.close();
我的 Eclipse 警告我“资源 'c' 应该由 try-with-resource 管理”,那么只写以下内容会更好吗?
try (Closeable c = map.remove(key)) {}
在我的特殊实现中,我有一个Closeable 的子类,其中close() 不会抛出IOException,因此不需要异常处理。
【问题讨论】:
-
它在
try块之后自动调用c.close() -
用
try-with-resources声明就好了,你的问题是什么? -
您能否提供有关 Closeable 对象的更多详细信息,为什么将它们放在地图中以及为什么在从地图中移除它们时需要关闭它们?
-
你可以通过写
map.remove(key).close()来消除c。 -
@Jerry06 我知道它的作用,我只想知道最佳实践。 @YuJiaao 正如 matoni 在他的回答中所说的“空的资源尝试看起来很奇怪。”,所以我问了。 @KevinKrumwiede 你是对的,但这不是问题。 @WilQu 它用于 ServerSocket 进程。该地图保存活动的客户端连接。在断开连接或超时时,它们将从该地图中删除,并且正在监听的
Thread将被关闭。
标签: java try-with-resources autocloseable