Попробуйте с ресурсом / Closable-Autoclosable - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь понять Попробуйте-с-ресурсом . Прочитав несколько статей, я понимаю, что каждый класс, реализующий или расширяющий closable / auto-closable, может извлечь выгоду из метода close(), который вызывается для закрытия объекта.

Теперь на практике у меня есть этот код:

try (FileInputStream inputStream = new FileInputStream(instructionFile);
     Scanner sc = new Scanner(inputStream, "UTF-8")) {
    while (sc.hasNextLine()) {
        String startingPosition = sc.nextLine();
        String instructions = sc.nextLine();
        // Some actions
    }
    if (sc.ioException() != null) {
        throw sc.ioException();
    }
} catch (NoSuchElementException e) {
    throw new IncompleteInstructions();
} catch (IOException e) {
    throw e;
}

Как видите, я использовал классы FileInputStream и Scanner, я ожидал увидеть оба этих класса, реализующие или расширяющие Closable, вместо этого у меня есть метод classi c close(), похоже, обертка из Closable.

Мой вопрос, кто должен реализовывать или расширять Closable, является ли это источником данных, таких как файлы для класса FileInputStream и читаемый интерфейс для Scanner класс.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Оба ваших класса реализуют Closeable, который расширяет AutoCloseable.

Чтение их javado c помогает, но, в конце концов, их метод close будет автоматически вызываться с помощью try-with -resources.

AutoCloseable javado c:

Объект, который может содержать ресурсы (например, дескрипторы файлов или сокетов), пока он не будет закрыт . Метод close() объекта AutoCloseable вызывается автоматически при выходе из блока try -with-resources, для которого объект был объявлен в заголовке спецификации ресурса. Эта конструкция обеспечивает быстрое освобождение, избегая исключений из-за нехватки ресурсов и ошибок, которые могут возникнуть в противном случае.

0 голосов
/ 09 июля 2020

FileInputStream выдвигается InputeStream

InputStream и Scanner оба реализуют Closable

Closable выдвигается AutoClosable

Итак * 1014 Экземпляры * и Scanner - это AutoClosable, и после инструкций в блоке try, завершающих sh выполнение, JVM автоматически вызовет метод .close() для этих ресурсов. Как Java docs состояние,

Оператор try-with-resources гарантирует, что каждый ресурс будет закрыт в конце оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...