Чем интерфейс AutoCloseable отличается от Closeable?
AutoCloseable (Java 7) — для любых ресурсов, close() бросает Exception. Closeable (java.io, старше) — его наследник под ввод-вывод: close() бросает IOException и обязан быть идемпотентным (повторный вызов ничего не делает).
- AutoCloseable идемпотентность лишь рекомендует
- Свой ресурс — объявить close() без throws или с узким исключением
- Lock, соединения, сессии — AutoCloseable
А ещё Обёртка над lock в AutoCloseable позволяет использовать try-with-resources
Подробно
AutoCloseable добавили в Java 7 вместе с try-with-resources, и он намеренно объявляет close() бросающим Exception, чтобы подойти любому ресурсу — соединению с базой, блокировке, сессии. Closeable существовал раньше, живёт в java.io и сужает исключение до IOException. Важное практическое различие в контракте: повторный close() у Closeable обязан быть безвредным, тогда как AutoCloseable этого не требует, хотя реализовывать идемпотентность настоятельно рекомендуется. При проектировании собственного ресурса берут AutoCloseable и по возможности сужают объявленное исключение — это упрощает жизнь вызывающему коду.
Что хотят услышать
- Различие исключений и идемпотентности.
Частые ошибки
- Объявлять close() бросающим Exception в своём классе, заставляя всех ловить лишнее.
- Считать, что try-with-resources работает только с java.io.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Это синонимы, оставленные для обратной совместимости
- ✗Только Closeable можно использовать в try-with-resources
- ✗AutoCloseable появился раньше и предназначен только для потоков ввода-вывода
- ✓Closeable — подтип AutoCloseable с IOException в close()
Что спросят дальше
- Почему стоит сужать исключение в своей реализации close()?
- Что произойдёт, если close() бросит исключение при выходе по return?
Разбор темы
- Управление ресурсами: try-with-resources
Беды ручного finally, автозакрытие AutoCloseable, suppressed-исключения и разница Closeable/AutoCloseable.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.