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