Вопрос с собеседования · Java

Чем интерфейс AutoCloseable отличается от Closeable?

MiddleИсключения и ресурсы
Коротко

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?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования