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).