Где закрыть переменную-член (например ,:socket) в классе Java? - PullRequest
0 голосов
/ 05 июня 2019

В моем случае, переменная-член является сокетом.Но этот вопрос может быть общим для любой переменной-члена, которая нуждается в некоторых операциях перед удалением объекта.

Я создал java-класс "DB", в котором есть член сокета.Я создаю член сокета в конструкторе.
Сокет будет оставаться открытым до тех пор, пока этот объект класса "DB" не станет GC.Так как мы должны закрыть сокет с помощью socket.close (), а Java не поддерживает деструктор.В этом случае мне интересно, где я должен положить "socket.close ()"?Переписать «finalize ()», как показано ниже?

Я слышал, что finalize () - устаревший метод.Тогда каково будет долгосрочное решение для такого рода проблемы, когда переменная-член требует некоторой операции перед удалением объекта?

Спасибо.

@Override
protected void finalize() throws IOException 
{
    m_socket.close();
}
...