Какие есть альтернативы конструкции try-with-resources в Java?

«Какие есть альтернативы конструкции try-with-resources в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основная альтернатива try-with-resources (Java 7+) — это ручное управление ресурсами с помощью блока try-finally.

1. Ручное закрытие в finally (Java 6 и ранее):

BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader("file.txt"));
    // работа с ресурсом
} finally {
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
            // обработка ошибки закрытия
        }
    }
}

Почему try-with-resources лучше: Автоматически закрывает все ресурсы, реализующие AutoCloseable, корректно подавляет исключения и более читаем.

2. Использование метода use() в Kotlin:

FileInputStream("file.txt").use { input ->
    // работа с ресурсом
}

3. Для классов без AutoCloseable: Можно создать обёртку, реализующую этот интерфейс, или по-прежнему использовать ручное управление в finally.