Tenho usado try-with-resources
muito. Uso para tipos de recursos de banco de dados ou File
coisas assim o tempo todo para fechar o recurso.
Agora, estou usando POI para arquivos grandes do Excel e estou percebendo que devo chamar workbook.dispose()
. O try-with-resources chamará o dispose()
método? Tudo o que pesquisei abrange apenas close()
.
Não estou convencido de que a duplicata seja a mesma pergunta. Minha pergunta pergunta especificamente se Dispose
is handled by try-with-resource
. Nenhuma das outras perguntas menciona Dispose
.
Não, try-with-resources só funciona para objetos que implementam
java.lang.AutoCloseable
. Essa interface define um único método:close()
. Esseclose
método é o único método chamado pela sintaxe try-with-resources.Para citar o tutorial em try-with-resources :
Nenhum
dispose()
método é chamado automaticamente. No entanto, os desenvolvedores dessas classes/bibliotecas podem ter decidido chamardispose()
em sua implementação doclose()
método ou vice-versa. Nesse caso, ambos os métodos "clean up" fariam o mesmo.Try-with-resources suporta apenas a
AutoClosable
interface e chamará apenas oclose()
método. Você pode ler mais sobre isso aqui .Você tem a opção de usar um wrapper - se necessário - que implementaria
AutoClosable
e chamariadispose()
oclose()
método. Aqui está um exemplo básico (não testado):Não sei muito sobre o Apache POI, mas talvez você queira verificar se é necessário chamar close e discard.