Toutes les grandes raisons de définir des exceptions personnalisées en Java? P>
6 Réponses :
Fournir des informations spécifiques à une erreur, permettant des gestionnaires d'exception plus fins. P>
Deux raisons immédiatement à l'esprit: P>
essayer {...} Catch (exception e) {...} code> - Avoir vos propres sous-classes vous permet de traiter des cas d'exception distincts séparément. (Comme la différence entre ne pas avoir d'autorisations pour exécuter un rapport et l'exécution de rapport échouant). LI>
- Vous pouvez ajouter un contexte supplémentaire - donc par exemple si vous avez votre propre
déjàloggedinexception code>, par exemple, cette exception peut avoir une méthode pour récupérer l'adresse IP à partir de laquelle l'autre session a été lancée. Ou un CompteLIMITExceedException code> pourrait contenir la limite de compte courant. Des informations supplémentaires à l'exception vous permettent de prendre une réponse plus éclairée plus éclairée lors de la capture. Li>
ol>
Pouvez-vous s'il vous plaît donner un exemple de travail à la place pour que cela devienne plus clair pour moi?
Oui. Le grand avantage est qu'il vous permet de jeter et des exceptions qui signifient ce que vous em> veulent qu'ils veulent dire. Si vous réutilisez une exception existante, tout élément de votre code qui attire l'exception doit faire face à la possibilité que votre code n'ait été lancé par votre code, mais par un autre code de parti de la bibliothèque. Cela a tendance à faire des erreurs de manipulation plus faciles. P>
Avec une exception personnalisée, vous pouvez indiquer à vos appelants qu'un type d'erreur spécifique est arrivé, plutôt qu'une erreur. Et les appelants peuvent ainsi faire spécifiques à ce type d'erreur. P>
Utilisons une analogie de voiture: Préférez-vous que votre voiture refuse de commencer par un léger rouge unique clignotant ou avec un «réservoir de gaz vide dédié» clignotant? P>
Je sais ce que vous essayez de dire, mais parler de messages n'est pas une bonne analogie. Si ce n'était juste des messages, nous pourrions tout simplement lancer à lancer une nouvelle exception («Je ne commencerai pas parce que je suis hors de l'essence») Code>
Vous avez raison. Comme toujours, une analogie de voiture n'est pas une très bonne analogie. Je vais éditer mon message pour éviter de parler de messages.
Tout simplement, cela vous permet de traiter chaque exception de la bonne voie.
Considérez le code suivant P>
try { doSomethingThatCouldThrowManyExceptions(); } catch (ExceptionalCircumstance1 ex) { // deal with this specific circumstance } catch (ExceptionalCircumstance2 ex) { // deal with this specific circumstance } catch (ExceptionalCircumstance3 ex) { // deal with this specific circumstance } finally { // do some common code }
Vous voudrez peut-être renommer les cours à ExceptionnelCircumCstancition2 et ExceptionnelCircumstance3 ;-)
À mon avis, la principale motivation des exceptions personnalisées est d'obtenir une meilleure modélisation de votre domaine d'application. Lors de la conception de cours, vous passez beaucoup d'efforts à nommer des objets et à attribuer leurs responsabilités. Je pense que, à ce stade, certains efforts visant à envisager d'éventuelles conditions d'erreur sont un bon investissement. Par exemple, lors de la creuser plus profondément, les clients peuvent souvent vous donner des exemples courants qui doivent être manipulés (par exemple, des données non valides, une violation des contraintes logiques, des capteurs peu fiables, etc.). En conséquence, vous aurez du code qui est plus facile à comprendre et à modifier. Les erreurs spécifiques à l'application sont bien séparées et la manipulation d'erreurs supplémentaires peut être facilement réalisée. P>
Un autre point est qu'il pourrait fournir une meilleure abstraction pour différentes parties du système. Par exemple, si vous anticipez vraiment que la mise en œuvre de la pièce de persistance changera à l'avenir, il est alors de mieux mieux utiliser des exceptions personnalisées dans son API. Sinon, vous aurez plus tard beaucoup de plaisir à traiter avec SQLException ou SaxExceptions dans de nombreux endroits: -) p>