🚨 try-with-resources ou try-finally? 🚨
Ao trabalhar com recursos como arquivos, conexões de banco de dados ou streams, uma das responsabilidades mais críticas é garantir que eles sejam fechados corretamente. E, historicamente, a forma mais comum era o bom e velho try-finally.
Mas... 👇
📉 O problema do try-finally:
Apesar de funcionar, o try-finally:
- Torna o código mais verboso;
- Pode esconder exceções importantes;
- Era frequentemente mal utilizado, até por programadores experientes;
- E se houver duas exceções (uma no try e outra no finally), a do finally engole a outra.
✅ A evolução: try-with-resources
Desde o Java 7, temos uma forma muito mais elegante de lidar com isso: o try-with-resources. Essa construção:
- Garante que os recursos serão fechados automaticamente;
- Permite capturar exceções suprimidas com getSuppressed() se algo der errado;
- É mais concisa, legível e segura;
- E aceita cláusulas catch normalmente!
🔧 Recursos como BufferedReader, InputStream, Connection já implementam a interface AutoCloseable, então estão prontos pra serem usados nesse formato.
📌 Exemplos nos comentários 👇 (📸 mostre seus prints com os exemplos de try-finally, try-with-resources, com múltiplos recursos e com catch);
📣 Por fim: evite bugs difíceis de rastrear e código poluído. Use try-with-resources sempre que lidar com recursos que precisam ser fechados!
Fonte: Java Efetivo - Joshua Bloch - Terceira Edição