Страницы

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

пятница, 29 ноября 2019 г.

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

#java


В Java 1.5 был введен интерфейс Closeable с одним методом close(). В Java 1.7 был
добавлен оператор try-with-resources, и для этого был введен интерфейс AutoCloseable,
который был сделан родительским интерфейсом Closeable.

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

Или это было сделано только для того, чтобы метод close() мог бросать любые исключения,
а не только наследники от IOException?
    


Ответы

Ответ 1



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

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

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