Com o build 105 do Java 7, está disponível a sintaxe para fechar automaticamente arquivos ou outros recursos que precisem de tratamento especial para serem fechados.
Baixem o build em : http://download.java.net/jdk7/
Vejam o blog do Joseph Darcy, http://blogs.sun.com/darcy/
A spec está em: http://blogs.sun.com/darcy/entry/project_coin_updated_arm_spec
O Thingol postou um exemplo simples desse recurso.
http://thingol-guj.blogspot.com/2010/08/java-7-automatic-resource-management.html
Dá para fazer um exemplo mais elaborado.
Em resumo: o equivalente do seguinte recurso em C#, que chama automaticamente o “Dispose” (equivalente do método Java “close”):
using (StreamWriter sw = new StreamWriter ("teste.txt")) {
sw.WriteLine ("teste");
}
é, em Java 7,
try (PrintWriter pw = new PrintWriter ("teste.txt")) {
pw.println ("teste");
}
Para economizar palavras-chave, foi reusada a palavra-chave “try”. Uma coisa que é um pouco diferente no Java em relação ao C# é que esse try continua a ter o “catch” e o “finally”, então você pode ao mesmo tempo fechar o arquivo e tratar as exceções, tudo dentrodo mesmo try/catch/finally.
Uma coisa meio chata é que a classe deve implementar AutoCloseable, mas as classes do JDBC não implementam AutoCloseable apesar de o Darcy ter insistido bastante com o time do JDBC. Parece que a spec do JDBC para o Java 7 está fechada há tempos…
