4

我想覆盖 LinkedHashMap 的 removeEldestEntry(Map.Entry) 方法来自动删除陈旧的映射。另外我想清理将被删除的条目。

该条目是一个 AutoCloseable 对象。如果要删除它,我可以调用 close() 吗?如下所示是最佳做法吗?

        public boolean removeEldestEntry(@Nonnull final Map.Entry<myKey, myObject> eldestEntry) {
            if (size() > 100) {
                eldestEntry.getValue().close();
                return true;
            }
            return false;
        }
4

2 回答 2

1

如果您不再使用任何基础资源并且不需要该项目,我不明白为什么不这样做。

于 2018-09-26T18:10:55.800 回答
0

关闭资源不会释放对象或使其不安全使用。

如果您在关闭它后尝试使用它,它可能会引发异常,具体取决于您调用的方法对关闭的资源执行的操作。

只有当不再引用对象时,才会在 GC 上释放对象的内存。

于 2018-09-26T18:22:22.677 回答