Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在将对象从LinkedHashMap中删除之前关闭该对象是否安全?_Java_Hashmap_Autocloseable - Fatal编程技术网

Java 在将对象从LinkedHashMap中删除之前关闭该对象是否安全?

Java 在将对象从LinkedHashMap中删除之前关闭该对象是否安全?,java,hashmap,autocloseable,Java,Hashmap,Autocloseable,我想重写LinkedHashMap的removeEldestEntry(Map.Entry)方法来自动删除过时的映射。我还想清理将被删除的条目 该条目是一个可自动关闭的对象。如果要删除它,我可以调用close()吗?按以下方式操作是最佳做法吗 public boolean removeEldestEntry(@Nonnull final Map.Entry<myKey, myObject> eldestEntry) { if (size() &

我想重写LinkedHashMap的removeEldestEntry(Map.Entry)方法来自动删除过时的映射。我还想清理将被删除的条目

该条目是一个可自动关闭的对象。如果要删除它,我可以调用close()吗?按以下方式操作是最佳做法吗

        public boolean removeEldestEntry(@Nonnull final Map.Entry<myKey, myObject> eldestEntry) {
            if (size() > 100) {
                eldestEntry.getValue().close();
                return true;
            }
            return false;
        }
public boolean removeeldestery(@Nonnull final Map.Entry elderestery){
如果(大小()>100){
eldestantery.getValue().close();
返回true;
}
返回false;
}

如果您不再使用任何基础资源,并且不需要该项,我看不出为什么不使用。

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

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


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

我不明白为什么不能。调用代码非常简单,基本上
if(removeEldestEntry(eldest))removeentryworkey(eldest.key)。规范甚至允许它在必要时修改映射。你为什么要使用原始的
映射。条目
?我想你已经颠倒了正确和错误:现在你要逐出条目,除非有超过100个。@LouisWasserman oops我会更改它。谢谢。正如user2357112所说,在LinkedHashMap派生类上使用泛型参数(
)比使用原始类型更安全,然后
elderstentry
参数将是
T
类型,调用
close()
时可以省略强制转换。