Интерфейс AutoCloseable появился в седьмой версии Java. Он представляет собой объект, предназначенный для хранения какого-либо ресурса до тех пор, пока он открыт. Он имеет только один метод close(), в котором прописаны команды, выполняемые при закрытии ранее задействованного ресурса. Особенностью данного интерфейса является возможность употреблять его в конструкции, состоящей из блоков try – wth – resource.
Closeable считается предшественником AutoCloseable. Для обеспечения совместимости он все ещё присутствует в Java, но лучше применять AutoCloseable. Если требуется употреблять экземпляры, относящиеся к Closeable в блоках try – wth – resource, то AutoCloseable нужно добавить в качестве родителя.
Основной недостаток Closeable – это ограниченный набор исключений. Благодаря наследованию в AutoCloseable расширен тип исключений от IOExcepton до Excepton.
Кроме этого контракт функции close() в Closeable предполагает идемпотентность, то есть чтобы результат выполнения метода при каждом выполнении был тот же, что и при первом запуске функции. В то же время метод close() в AutoCloseable может иметь различные побочные эффекты.