2012-04-01 14 views
9

È considerata una cattiva programmazione scrivere una prova e catturare all'interno di una clausola finale?try catch in finally section

Sto avendo nel mio metodo principale un fileInputStream che voglio chiudere. Voglio finalmente inserire .close(), quindi si chiuderà indipendentemente da cosa. Non voglio aggiungere una dichiarazione di tiri al metodo principale, in quanto è il principale metodo: P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

è ok? Grazie

+8

Sì, questo è OK e a volte è necessario. –

+1

Se stai per rilanciare l'eccezione non hai bisogno del try catch. Il try catch è necessario perché devi fare qualcosa con l'eccezione (al minimo indispensabile, loggandolo), se decidi di non farlo, non è necessario. – SJuan76

+0

Ho bisogno di stampare qualcosa su System.err e poi su System.exit Ecco come funziona il metodo throwExcpetion (e) –

risposta

9

Il modello di dover provare/recupera in infine i metodi è purtroppo uno schema ricorrente in Java 6 e precedenti. Direi che in realtà è una cattiva pratica, ma non quella che si può veramente evitare in Java 6 (vedi sotto per Java 7).

Un ulteriore problema è che eventuali nuove eccezioni generate nel blocco finally sovrascriveranno le eccezioni generate prima di raggiungere questo blocco.

In Java 7 c'è specificamente per i casi in cui è necessario chiudere le risorse (la maggior parte dei casi d'uso per i costrutti try/finally/try/catch) il nuovo costrutto try-with-resources. Questo catturerà anche le eccezioni primarie e secondarie.

Utilizzando questo costrutto è quindi oggi una best practice nel JDK 7 e sì, il codice si mostra è quindi una cattiva pratica in Java 7.

+0

Sono obbligato ad usare solo Java 6. la scuola non ha ancora approvato il 7. –