Recentemente ho pensato a un ExceptionHandler generale, che ho potuto inizializzare una volta nel contesto dell'app e iniettarlo ovunque. L'idea che avrà un'interfaccia abbastanza semplice con solo public void handle(Exception ex)
, e quindi in base al tipo di eccezione dovrebbe decidere cosa fare, magari solo registrarlo, o mostrare un messaggio di avviso all'utente, o magari uccidere l'intera app.
La domanda è: qual è il modo più carino per scrivere questo gestore senza un sacco di instanceof
s? Sfortunatamente googling mi dà solo il gestore di eccezioni predefinito per RuntimeException
introdotto in Java 5.
La mia prima idea è creare un enum, che avrà un campo Class per il tipo di eccezione e restituirà il punto di esecuzione appropriato, ad esempio un gestore di eccezioni concreto che implementa anche l'interfaccia public void handle(Exception ex)
, ma con il cast richiesto già .
UPD @alex Ho pensato a questa opzione e c'era una ragione per cui non mi sentivo bene. Supponiamo di avere un codice che utilizza jcif per accedere a un file. La copia semplice nell'archiviazione locale richiede tre wrapper di eccezione: SMBException , MalformedUrlException e IOException . Se non utilizzo Java 7, è possibile che vengano catturati tre volte CenralExceptionHandler.handle (e); che non è leggibile. Ad ogni modo, quando ci penso, è colpa mia se non posso usare Java 7, quindi forse il tuo suggerimento è il migliore. Ma sono ancora in dubbio.