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