Java Одноразовый шаблон
С# поддерживает одноразовый шаблон для детерминированной сборки мусора с помощью dispose pattern.
Есть ли такой шаблон для java?
Java 7 имеет autoclosable
, который вы можете использовать с помощью блоков finally finally, чтобы вызвать метод close
.
Как насчет версий до 7?
Существует ли одноразовый шаблон (детерминированная сборка мусора) для Java 5 или 6?
Ответы
Ответ 1
Ближайшим до Java 7 является только "ручной" блок try/finally:
FileInputStream input = new FileInputStream(...);
try {
// Use input
} finally {
input.close();
}
Оператор using
был одной из вещей, которые я нашел наиболее приятными в С#, когда я впервые начал использовать С# 1.0 на фоне Java. Хорошо видеть это, наконец, на Java 7:)
Вы также должны рассмотреть Closeables
в Guava - это позволяет вам не беспокоиться о том, является ли ссылка нулевой (как и using
) и, при необходимости, исключения "журналы и ласточки", которые были выбраны при закрытии, чтобы исключить любое подобное исключение из "перезаписывания" исключения, созданного из блока try.
Ответ 2
Вся цель шаблона удаления заключается в поддержке уникального шаблона using (temporaryObject)
С#. У Java не было ничего подобного этому шаблону до 7.
Все объекты Java, которые имеют ресурсы, поддерживают шаблон удаления путем ручного закрытия объекта, в котором хранятся ресурсы.
Ответ 3
То, что вы ищете, это попробовать с ресурсами.
try ( FileInputStream input = new FileInputStream(...);
BufferedReader br = new BufferedReader(...) ) {
// Use input
}
Конечно, ресурс должен быть Closeable (или AutoCloseable).