Утечка ресурсов Eclipse 4.2 через отдельный метод close

Я использую Eclipse 4.2 с включенными предупреждениями об утечке ресурсов.

Этот код выдает, на мой взгляд, ложное предупреждение об утечке ресурсов.

    public static void test(){
    InputStream in = null;
try {
    in = new FileInputStream("A");
} catch (IOException e) {
    return;
}finally{
    close(in);
}
}

public static void close(Closeable closeable) {
if (closeable != null) {
    try {
        closeable.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

Если я проведу рефакторинг кода и вставлю метод close в блок finally, все будет хорошо.

    public static void test2(){
    InputStream in = null;
try {
    in = new FileInputStream("A");
} catch (IOException e) {
    return;
}finally{
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
        e.printStackTrace()
        }
    }
}
}

Могу ли я как-то удалить эти предупреждения, не дублируя код close метод и без необходимости отключать предупреждения утечки ресурсов?

Я нашел здесь отчет об ошибке для чего-то подобного в циклах, но в моем коде нет циклов.

2 ответа

Решение
  • Вы должны увидеть предупреждение "Потеря потенциального ресурса...", если нет, пожалуйста, откройте ошибку.
  • Основная проблема заключается в том, что компилятор не знает, что делает метод close(..). Это может или не может закрыть ресурс. (Обратите внимание, что компилятор не выполняет межпроцедурный анализ)
  • Вы можете игнорировать предупреждения о потенциальной утечке ресурсов. (Предупреждения "утечки ресурсов" гарантированно верны, а предупреждения "Потенциальные..." - нет)

Более подробную информацию об анализе утечки ресурсов можно найти здесь - http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-avoiding_resource_leaks.htm&cp=1_3_9_1

РЕДАКТИРОВАТЬ: слово "утечка ресурсов" против "потенциальной утечки ресурсов"

  • Идея состоит в том, что все сообщаемые предупреждения о "утечке ресурсов" гарантированно верны, но могут не быть "всех" утечек ресурсов в базе кода.
  • "Потеря потенциальных ресурсов" - это хорошо… потенциальные проблемы. Некоторые разработчики включают предупреждения "Потенциал...", когда знают, что что-то идет не так, но не знают, где. В таких случаях потенциальные предупреждения помогают сузить поиск. Некоторые другие разработчики просто время от времени просматривают потенциальные предупреждения, чтобы увидеть, есть ли там реальная проблема.

В идеале мы хотели бы, чтобы компилятор предоставил нам полный и правильный набор проблем, но есть ограничения в достижении этого:-)

Хорошие новости: Eclipse 4.3 распознает близкие утилиты Google и Apache!

http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M4-201212140730/news/

(Поиск "Анализ утечки")

Другие вопросы по тегам