Nella mia esperienza (sono uno sviluppatore Java da oltre 10 anni), è cattiva pratica. Non che sia un odore di codice, ma spesso ti ostacola nel tuo lavoro quotidiano.
Pensa a un'applicazione che tenta di leggere un file e probabilmente genera FileNotReadableException
. Dopo un po 'ti rendi conto che il file potrebbe non essere leggibile a causa di diritti di accesso insufficienti. cosa fai? Cambia il nome dell'eccezione - no, potrebbe essere ancora in uso. Aggiungi un sottotipo FileNotReadableBecauseOfAccessRightsException
? Bene, questo è piuttosto 2 errori - non leggibili + diritti di accesso, ma la causa principale è la cosa dei diritti. Quindi aggiungi un InsufficientAccessRightsException
da qualche altra parte nell'albero delle classi. Nel fare ciò, devi anche cambiare il codice in cui è stata rilevata l'eccezione originale dai suoi 2 diversi tipi ora (una violazione del principio "aperto-chiuso"). E così via ... E qual è il guadagno? ... a differenza di un'eccezione con un messaggio? Sicurezza statica. Nel contesto delle eccezioni è utile solo per evitare errori di battitura. Uno sviluppatore potrebbe comunque utilizzare un tipo di eccezione errato (ad esempio EntryNotFoundException
anziché FileNotReadableException
).
Come detto da dwoz: un'eccezione è solo una classe.
La mia esperienza è che poche eccezioni sono sufficienti. Ciò che si desidera esprimere sono messaggi di errore: per diversi messaggi è necessaria solo un'eccezione (di runtime) con un campo String. Tutte le eccezioni dovrebbero essere catturate da un gestore di errori predefinito al livello più alto possibile (o prima se necessario).
Oltre al solito messaggio, a volte è necessario memorizzare più informazioni, come un percorso del filesystem, un nome utente, un id-dispositivo, un uuid per tracciare più facilmente l'errore in un sistema distribuito, ecc. per tali scopi suggerisco per creare classi di eccezioni personalizzate.
Come detto da Amon, una regola empirica dovrebbe essere: per librerie utilizzare (alcune) eccezioni, per (web-) applicazioni us il meno possibile