Java Одноразовый шаблон - PullRequest
       25

Java Одноразовый шаблон

13 голосов
/ 15 октября 2011

C # поддерживает одноразовый шаблон для детерминированной сборки мусора с использованием шаблона dispose .

Существует ли такой шаблон для Java?

В Java 7 есть autoclosable, который можно использовать с блоками try finally для вызова метода close.

А как насчет версий до 7?

Существует ли одноразовый шаблон (детерминированная сборка мусора) для Java 5 или 6?

Ответы [ 3 ]

18 голосов
/ 15 октября 2011

Ближайший к Java 7 блок - это просто «ручные» блоки try / finally:

FileInputStream input = new FileInputStream(...);
try {
  // Use input
} finally {
  input.close();
}

Оператор using был одной из тех вещей, которые мне показались наиболее приятными в C #, когда я впервые начал использовать C # 1.0.из фона Java.Хорошо, наконец, увидеть это в Java 7:)

Вы также должны учитывать Closeables в Гуаве - это позволяет вам не беспокоиться о том, является ли ссылка нулевой (так же, какоператор using делает это) и, по желанию, «регистрирует и глотает» исключения, сгенерированные при закрытии, во избежание того, чтобы любое такое исключение эффективно «перезаписывало» исключение, выброшенное из блока try.

6 голосов
/ 15 октября 2011

Целью шаблона удаления является поддержка уникального шаблона C # using (temporaryObject). В Java не было ничего подобного до 7.

Все объекты Java, у которых были ресурсы, поддерживали шаблон удаления посредством ручного закрытия объекта, который содержал ресурсы.

0 голосов
/ 23 февраля 2018

То, что вы ищете, это попробовать ресурсы.

try ( FileInputStream input = new FileInputStream(...);
      BufferedReader br = new BufferedReader(...) ) {
  // Use input
} 

Ресурс должен быть закрываемым (или автоматически закрываемым), конечно.

...