Java AutoClosable поведение в функции

У меня есть пример кода здесь. Будет ли FileInputStream, созданный функцией, автоматически закрываться при наличии кода в блоке try/catch для parentFunction?

Или он должен быть явно закрыт в самой функции someOtherFunction()?

private void parentFunction() {

   try {
       someOtherFunction();
   } catch (Exception ex) {
    // do something here

   } 

}

private void someOtherFunction() {
    FileInputStream stream = new FileInputStream(currentFile.toFile());

    // do something with the stream.

    // return, without closing the stream here
    return ;
}

2 ответа

Решение

Вы должны использовать ресурс с блоком try-with-resource.

Пожалуйста, прочитайте документы для интерфейса AutoCloseable: https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

метод объекта AutoCloseable вызывается автоматически при выходе из блока try-with-resources, для которого объект был объявлен в заголовке спецификации ресурса.

Он должен быть явно закрыт в someOtherFunction() метод или используется в блоке try-with-resources:

private void someOtherFunction() {
    try (FileInputStream stream = new FileInputStream(currentFile.toFile())) {

        // do something with the stream.

    } // the stream is auto-closed
}
Другие вопросы по тегам