(к сожалению) нет эквивалента оператора using
в Java, хотя были некоторые мысли о включении чего-то подобного в Java 7. (Я думаю, в прошлый раз, когда я смотрел, они были "вне", но я нахожу это трудным идти в ногу со статусом функций в Java 7.)
По сути, вам нужен блок try / finally:
InputStream stream = new FileInputStream(...);
try {
...
} finally {
stream.close();
}
Тогда возникает проблема с тем, что делать с IOException
в случае сбоя close (), и проблема с исключением, которое «перезаписывает» любое исключение, выдаваемое основной частью кода - хотя последнее проблема в .NET тоже.
Guava делает это немного проще с классом Closeables
, со статическими методами close
и closeQuietly
, которые будут иметь дело с stream
равным нулю (в случае где вы объявляете переменную перед блоком, но присваиваете значение в блоке try).