Ho alcune domande sulla gestione delle eccezioni in Java. Ho letto un po 'su di esso e ho ottenuto alcune linee guida contraddittorie.Buone pratiche per la gestione delle eccezioni Java
Best Practices for Exception Handling
Andiamo attraverso l'articolo citato:
Essa afferma che si dovrebbe generalmente evitare l'uso di eccezioni controllate se "Codice cliente non può fare nulla". Ma cosa significa esattamente? La visualizzazione del messaggio di errore nella GUI è un motivo sufficiente per far ribollire l'eccezione verificata? Ma costringerebbe il programmatore GUI a ricordare di catturare RuntimeExceptions e i loro discendenti per visualizzare potenziali informazioni di errore.
La seconda vista presentata in questo articolo è che si dovrebbe evitare di inventare le proprie classi di eccezione a meno che non intenda implementare alcuni campi/metodi doganali in esse. Generalmente non sono d'accordo con questo, la mia pratica oggi è stata esattamente l'opposto: ho avvolto le eccezioni nella mia propria struttura di eccezione in obiettivi riflessi realizzati dalle classi che scrivo, anche se estendono Eccezione senza aggiungere nuovi metodi. Penso che aiuti a gestirli in modo più flessibile negli strati più alti quando vengono lanciati, inoltre è generalmente più chiaro e comprensibile per il programmatore che utilizzerà queste classi.
Ho implementato qualche codice oggi 'nuovo modo' presentato nell'articolo lanciando RuntimeException qua e là, quindi lascio analizzare Sonar. Per confondermi ancora di più, Sonar ha contrassegnato le mie RuntimeExceptions come errori principali con un messaggio come "Evita di lanciare eccezioni di tipo root, wrap'em nei tuoi tipi".
Quindi sembra piuttosto controverso, cosa ne pensi?
Ho anche sentito da uno dei leader della tecnologia oggi che solo il wrapping delle eccezioni è negativo, "perché è un'operazione davvero costosa per JVM". Per me, dall'altra parte lanciare SQLExceptions o IOException ovunque sembra un po 'di incapsulamento.
Quindi qual è la tua attitudine generale alle domande che ho presentato qui?
Quando per avvolgere eccezioni nei miei propri tipi, quando non dovrei farlo?
Dov'è quel punto di 'cliente non può fare nulla di questo, lanciare un'eccezione di runtime? '
E i problemi di prestazioni?
Sfortunatamente questo non è costruttivo per SO come da FAQ. Potresti voler provare programmers.stackexchange.com - detto questo, compra 'Effective Java' di Joshua Bloch. Chiunque seriamente su Java dovrebbe possedere una copia. –
Effettuerei sicuramente la migrazione a Programmers.SE se potessi. C'è stato un tempo in cui potevamo farlo? O ho solo sempre atteso con ansia questa volta? –
https://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html è una bella lista di buone pratiche – bla