gpt4 book ai didi

java - HashMap 潜在的资源泄漏(未分配的 Closeable)

转载 作者:行者123 更新时间:2023-12-01 18:31:58 24 4
gpt4 key购买 nike

我的整个系统有一个静态 HashMap,其中包含一些对象的引用;我们称之为myHash 。这些对象仅在我需要它们时才会实例化,例如

private static HashMap<String, lucene.store.Directory> directories;

public static Object getFoo(String key) {
if (directories == null) {
directories = new HashMap<String, Directory>();
}
if (directories.get(key) == null) {
directories.put(key, new RAMDirectory());
}
return directories.get(key); // warning
}

现在,Eclipse 在返回语句中告诉我一个警告:

Potential resource leak: '<unassigned Closeable value>' may not be closed at this location

为什么 eclipse 告诉我这个?

最佳答案

Directory 是一个 Closeable,它不会以实例化的相同方法关闭,Eclipse 会警告您,如果不在其他地方关闭,这可能会造成潜在的资源泄漏。换句话说,无论抛出什么错误,Closeable 实例都应该始终在某个地方关闭。

以下是在 Java 7+ 中使用 Closeable 的常用方法:

try (Directory dir = new RAMDirectory()) {
// use dir here, it will be automatically closed at the end of this block.
}
// exception catching omitted

在 Java 6 中:

Directory dir = null;
try {
dir = new RAMDirectory();
// use dir here, it will be automatically closed in the finally block.
} finally {
if (dir != null) {
dir.close(); // exception catching omitted
}
}

关于java - HashMap 潜在的资源泄漏(未分配的 Closeable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779163/

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