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