Post

Visualizzazione dei post con l'etichetta try-with-resources

Java 7: Gestione delle Suppressed Exceptions nel try-with-resources

DOMANDA: Cosa sono e come si gestiscono le Suppressed Exceptions in un try-with-resources? RISPOSTA: Nei post precedenti abbiamo visto lo statement try-with-resources e come creare oggetti autochiudenti grazie alle novità introdotte con Java 7 . Un particolare comportamento delle eccezioni introdotto con il try-with-resources è quello delle Suppressed Exceptions . Come già intuibile dal nome, sono delle eccezioni soppresse dalla JVM. Guardiamo subito un esempio di una risorsa AutoCloseable che lancia due eccezioni, una generica Exception in chiusura e una IOException nel metodo faiQualcosa (): package trywithresources; import java.io.IOException; public class PrimaRisorsa implements AutoCloseable{    public PrimaRisorsa() {       System.out.println( "COSTRUISCO LA RISORSA" );    }    public void faiQualcosa() throws IOException {       System.out.println( "PrimaRisorsa: Faccio qualcosa" );       throw new IOException( &quo

Java 7: Autocloseable e Closeable Objects

DOMANDA: Cosa sono gli oggetti AutoCloseable e Closeable? RISPOSTA: Java 7 ha introdotto una comoda caratteristica che è il try-with-resources di cui abbiamo parlato abbondantemente in questo post . Gli oggetti AutoCloseable e Closeable sono delle classi che implementano rispettivamente java.lang.AutoCloseable e java.io.Closeable . L'unico metodo che l'interfaccia obbliga ad implementare è il close() , chiamato alla fine del blocco try-with-resources . Oltre a tutti gli oggetti che da Java 7 implementano già questa interfaccia, è possibile rendere le proprie classi " autochiudenti " semplicemente implementandola a nostra volta. Guardiamo l'esempio: package trywithresources; public class PrimaRisorsa implements AutoCloseable{    @Override    public void close() throws Exception {       System.out.println( "CHIUDO PrimaRisorsa" );    } } E ora vediamo come funziona con un Test : package trywithresources; import j

Java 7: Statement try-with-resources

DOMANDA: Che cos'è lo Statement try-with-resources introdotto con il rilascio di Java 7? RISPOSTA: Una delle problematiche più comuni ai programmatori è la sistematica chiusura delle risorse e/o connessioni aperte. Capita spesso, infatti, che per dimenticanza o meglio per errori e/o eccezioni impreviste non gestite al meglio, alcune risorse rimangano in attesa di una chiusura che non arriverà mai. Per prevenire questi memory leaks  da Java 7 è stato introdotto lo statement try-with-resources che si occupa di chiudere automaticamente le risorse aperte. Guardiamo come funziona: public String leggiRigaDaFile(String path) throws IOException {     try (BufferedReader br =                     new BufferedReader( new FileReader(path))) {         return br.readLine();     } } La novità è che c'è un blocco try (in questo caso senza catch e finally ) con uno o più argomenti tra parentesi. Questi parametri rappresentano un oggetto risorsa che Java garant