Всякий раз, когда мне нужно получить ресурс на Java, а затем гарантировать, что ресурс освобожден, где может возникнуть исключение, я использую следующий шаблон:
try {
Resource resource = null;
try {
resource = new Resource();
// Use resource
} finally {
if (resource != null) {
// release resource
}
}
} catch (Exception ex) {
// handle exceptions thrown by the resource usage or closing
}
Например, если мне нуженсоединение с базой данных, и использование или закрытие соединения может вызвать исключение, я пишу следующий код:
try {
Connection connection = null;
try {
connection = ... // Get database connection
// Use connection -- may throw exceptions
} finally {
if (connection != null) {
connection.close(); // This can also throw an exception
}
}
} catch (SQLException ex) {
// handle exceptions thrown by the connection usage or closing
}
Мне не нравится просто делать простой try-catch-finally, потому что я обязан поймать(возможное) исключение, которое может быть выдано, когда соединение с базой данных закрыто, и я никогда не уверен, как с этим справиться.
Есть ли лучший шаблон для обработки этой ситуации?