Sobes.tech
Назад к вопросам
Senior
6

В чём разница между AutoCloseable и Closeable?

Компании, где спрашивали
kode.ru

Ответ от нейросети

sobes.tech AI

Интерфейсы Closeable и AutoCloseable в Java используются для автоматического закрытия ресурсов, но имеют несколько отличий:

  • Closeable находится в пакете java.io и предназначен для потоков ввода-вывода. Метод close() в этом интерфейсе объявлен с выбрасыванием IOException.
  • AutoCloseable появился в Java 7 в пакете java.lang и более общий. Метод close() может выбрасывать любое исключение (Exception).

Closeable наследуется от AutoCloseable, то есть все Closeable являются AutoCloseable, но не наоборот.

Это важно при использовании try-with-resources: если ресурс реализует Closeable, то исключения закрытия ограничены IOException, а если только AutoCloseable — могут быть любые.

Пример:

class MyResource implements AutoCloseable {
    @Override
    public void close() throws Exception {
        System.out.println("Закрытие ресурса");
    }
}

try (MyResource r = new MyResource()) {
    // работа с ресурсом
}