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
}