Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Совместимость интерфейсов Closeable и AutoCloseable

В Java 1.5 был введен интерфейс Closeable с одним методом close(). В Java 1.7 был добавлен оператор try-with-resources, и для этого был введен интерфейс AutoCloseable, который был сделан родительским интерфейсом Closeable
Как я понимаю, это было сделано для того, чтобы все классы, которые реализовывали интерфейс Closeable, автоматически можно было использовать в операторе try-with-resources. Но тогда непонятен вообще смысл ввода этого интерфейса. Почему бы тогда не сделать, чтобы этот оператор работал сразу с существующим интерфейсом Closeable, а не новым AutoCloseable?
Или это было сделано только для того, чтобы метод close() мог бросать любые исключения, а не только наследники от IOException?


Ответ

В методе close интерфейса Closeable есть два ограничения, которые хотели ослабить при вводе конструкции try-with-resources:
Проброс только IOException, что не подходит для всех. Например, для java.sql.Connection Требование идемпотентности. В AutoCloseable его нет, хотя это и "крайне рекомендуется".

Комментариев нет:

Отправить комментарий