Java 在将对象从LinkedHashMap中删除之前关闭该对象是否安全?
我想重写LinkedHashMap的removeEldestEntry(Map.Entry)方法来自动删除过时的映射。我还想清理将被删除的条目 该条目是一个可自动关闭的对象。如果要删除它,我可以调用close()吗?按以下方式操作是最佳做法吗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() &
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()
时可以省略强制转换。