Java. Совместимось интерфейсов

273
05 января 2017, 05:46

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

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

Answer 1

В методе close интерфейса Closeable есть два ограничения, которые хотели ослабить при вводе конструкции try-with-resources:

  1. Проброс только IOException, что не подходит для всех. Например, для java.sql.Connection.
  2. Требование идемпотентности. В AutoCloseable его нет, хотя это и "крайне рекомендуется".
READ ALSO
Не воспроизводится ts-поток

Не воспроизводится ts-поток

Пытаюсь воспроизвести закодированный h264 в MPEG-TS видеопоток, используя стандартный VideoViewВся программа состоит из одной activity с VideoView, Button и EditText

304
Не могу вывести иконку в пункт списка

Не могу вывести иконку в пункт списка

Пытаюсь вывести иконки для пунктов меню, но не совсем знаю как правильно это сделатьПриложение делает следующее: Есть файл json с объектами

288
Переопределение setValueAt

Переопределение setValueAt

Как в этом классе переопределить setValueAt(), относящийся к TableModel?

410
Как JSON записать в БД Realm

Как JSON записать в БД Realm

Получаю ответ ввиде json, но не могу понять как его записать в Realm

340