Очистка ресурса Java перед уничтожением объекта

У меня следующая проблема, и я знаю, что вопросов уже много, но ни один из них не дает мне действительно удовлетворительного ответа! Я написал много вещей на C++, и этот язык предоставляет деструктор, а Java нет из-за сборки мусора.

Небольшое введение в мою ситуацию: я написал программное обеспечение, которое обращается к локальной базе данных Sqlite3. Я написал центральный синглтон-класс для доступа к этой базе данных. Несколько других классов обращаются к БД через этот класс-оболочку. Вот псевдокод этого класса-обёртки:

public class MyDbWrapper
{
    private currentDbConnection;

    public MyDbWrapper(dbPath)
    {
        // Open the database connection with given path
    }

    public readFromDb()
    {
        ... // Uses the class member currentDbConnection
    }

    public writeToDb()
    {
        ... // Uses the class member currentDbConnection
    }

    public closeDb()
    {
        ...
    }
}

Теперь мой вопрос: как я могу убедиться, что соединение с базой данных закрыто перед выходом из приложения? Да я уже реализовала AutoCloseable интерфейс и да, я уже много работал с try-with-resources, но из-за доступа нескольких классов это на самом деле не вариант! В C++ деструктор решил бы эту проблему, но возможный "эквивалент" в java метод finalize не рекомендуется!

Так есть ли другие варианты, или я должен полностью изменить дизайн моей полной оболочки? Если да, как я могу предотвратить проблемы с производительностью из-за большого количества прав на чтение и запись, если я каждый раз заново открываю базу данных?

1 ответ

Решение

Как уже сказал Joker_vD, я решил эту проблему с помощью оператора try-with-resources в основном методе моей программы...

public static void main(String [] args)
{
    try(MyDbWrapper wrapper = new MyDbWrapper())
    {
        // Execute other task with usage of the database wrapper
    }
}

В этом решении нет необходимости использовать деструктор или использовать устаревший метод finalize(), соединение с базой данных закрывается, если программа заканчивается...

Joker_vD раз спасибо и кредиты Joker_vD

Другие вопросы по тегам