O Java suporta RAII / destruição determinística?

Já se passaram pelo menos cinco anos desde que eu trabalhei com Java e, naquela época, quando você queria alocar um objeto que precisava de limpeza (por exemplo, soquetes, identificadores de banco de dados), lembre-se de adicionar umfinally bloquear e chamar o método de limpeza lá.

Por outro lado, em C ++ (ou em outras linguagens em que a vida útil do objeto é determinística, por exemplo, Perl), o implementador de classe definiria uma função destruidora que executará a limpeza sempre que um objeto dessa classe sair do escopo. A vantagem dessa abordagem é que o usuário do objeto não pode esquecer de limpá-la - o destruidor é chamado automaticamente, mesmo que uma exceção seja lançada. Essa abordagem tem o nome bastante terrível de RAII - "Aquisição de recursos é inicialização".

Tem sido minha experiência que fazer as coisas "do jeito RAII" me salvou de muitas sobrecargas mentais em termos de não ter que me preocupar se e quando ocorrem desalocações de recursos. Estamos pensando em usar Java para um projeto de tamanho médio, e estou me perguntando se algum tipo de destruição determinística está entre os muitos novos recursos adicionados à linguagem desde a última vez que a examinei. (Espero que minha reclamação de que "Java não tenha RAII" tenha sido repreendidanesta discussão, mas até agora não consegui encontrar nenhum detalhe pesquisando no Google.)

Portanto, se alguém pudesse me indicar algum material introdutório sobre como fazer isso em Java, seria ótimo!

questionAnswers(4)

yourAnswerToTheQuestion