Solo un lungo commento sulla risposta del toolkit.
La ragione Eccezioni controllate sono un problema è che alla fine portano a codice come questo:
try {
Something that throws an exception
} catch (Exception e) {}
Si tratta di caso peggiore. Prima di tutto, non stanno registrando che stanno prendendo l'eccezione. Questo accade molto, ed è quasi FORZATO da eccezioni molto stupide controllate come quella su Thread.sleep(), genera InterruptedException che DEVE essere catturato, ma il 99% delle volte non ti può importare di meno se ne hai uno o meno .
Nel caso precedente, è aggravato dal fatto che le persone tendono a catturare "Eccezione" solo se ce ne sono più di una generata. Ciò significa che anche se viene lanciata un'eccezione critica incontrollata, verrà catturata e ignorata rendendo praticamente impossibile trovare il problema.
Più di una volta sono stato in team che dovevano trascorrere circa un mese uomo cercando di rintracciare bug nascosti in questo modo.
È un buon concetto che diventa orribile quando si aggiunge il fatto che gli umani sono quelli che devono attuarlo responsabilmente.
fonte
2009-02-09 18:36:15
Questa è una brutta descrizione della differenza tra le eccezioni di runtime/controllate. Questo è ** per nulla ** la differenza tra loro. Ci sono 'RuntimeException's che * si * devono intercettare e ci sono eccezioni controllate che è possibile evitare eseguendo controlli extra prima di chiamare il metodo. – Aaron
Ex1: 'NumberFormatException' è uno che di solito dovresti prendere. Catching 'NumberFormatException' è meglio che provare a controllare il formato di un' String' da solo prima di convertirlo in un numero, in quanto si potrebbe * ancora * finire con un 'NumberFormatException' che ora non stai catturando. – Aaron
Ex2: 'IOException' è uno che viene gettato ovunque da molte API. Questa è probabilmente l'eccezione più catturata per me e l'eccezione più catturata che vedo anche nel codice degli altri. Ci sono molti luoghi in cui sei costretto a catturare 'IOException' o le sue sottoclassi in cui non verrà mai lanciato in alcuni contesti di utilizzo dell'API che lo lancia. – Aaron