Maison > Java > javaDidacticiel > Pourquoi les développeurs s'opposent-ils aux exceptions vérifiées en Java ?

Pourquoi les développeurs s'opposent-ils aux exceptions vérifiées en Java ?

Susan Sarandon
Libérer: 2024-12-05 09:51:12
original
689 Les gens l'ont consulté

Why Do Developers Oppose Checked Exceptions in Java?

Contre les exceptions vérifiées

Pendant de nombreuses années, je n'ai pas pu obtenir de réponse satisfaisante à la question suivante : Pourquoi certains développeurs sont-ils si opposés aux exceptions vérifiées? J'ai eu de nombreuses conversations, lu des articles de blog et lu les opinions de Bruce Eckel (qui a été la première personne à s'exprimer contre les exceptions vérifiées).

J'écris actuellement du nouveau code et je prête beaucoup d'attention à la façon dont les exceptions sont gérées. J'essaie de comprendre le point de vue de la foule "nous n'aimons pas les exceptions vérifiées", mais je n'arrive toujours pas à le comprendre.

Chaque conversation que j'ai eue s'est terminée par la même question non résolue... Permettez-moi de développer :

En général (par la conception de Java),

  • Les erreurs concernent des choses qui ne devraient jamais être détectées (VM Allergique aux cacahuètes, quelqu'un a accidentellement saupoudré une boîte de cacahuètes dessus)
  • Les exceptions d'exécution concernent les choses que le programmeur a mal faites (le programmeur est sorti des limites en utilisant un tableau)
  • Les exceptions (en cours d'exécution sauf pour exceptions) Oui Utilisé pour des choses indépendantes de la volonté du programmeur (le disque est plein lors de l'écriture d'un fichier dans le système de fichiers, la limite du processus sur le nombre de descripteurs de fichiers a été atteinte, le fichier ne peut plus être ouvert)
  • Le jetable L'objet est simplement le parent de tous les types d'exceptions.

Un argument que j'entends souvent est que si une exception se produit, tout ce que le développeur a à faire est de quitter le programme.

Un autre argument courant que j'entends est que les exceptions vérifiées rendent plus difficile la refactorisation du code.

Pour l'argument "Je vais quitter", vous devez toujours afficher un message d'erreur pertinent même si vous quittez. Si vous tergiversez simplement sur la gestion des erreurs, vos utilisateurs ne seront pas très satisfaits lorsque le programme se terminera sans raison claire de sa fermeture.

Pour ceux qui "cela rend le refactoring difficile", cela indique que le niveau d'abstraction approprié n'a pas été choisi. Plutôt que de déclarer une méthode pour lancer une IOException, celle-ci doit être convertie en une exception plus appropriée à ce qui se passe.

Je ne suis pas fou d'emballer le catch(Exception) de Main (ou dans certains cas catch(Throwable), qui garantit que le programme se termine correctement, mais j'attrape toujours ceux spécifiques dont j'ai besoin Exception. Faire cela permet je dois au moins afficher un message d'erreur approprié

La question à laquelle les gens ne répondent jamais est :


Si vous lancez une sous-classe RuntimeException
au lieu d'une sous-classe Exception
, comment savez-vous ce que
devrait attraper ?



Si la réponse est d'intercepter l'exception, alors vous gérez toujours les erreurs du programmeur de la même manière que les exceptions système. Cela me semble faux.


Si vous attrapez Throwable, vous gérez toujours les exceptions système et les erreurs de VM (et les erreurs similaires) de la même manière. Cela me semble faux.


Si la réponse est de détecter uniquement les exceptions dont vous savez qu'elles sont levées, alors comment savoir quelles exceptions ont été levées ? Que se passe-t-il lorsque le programmeur X lève une nouvelle exception et oublie de l'attraper ? À mon avis, c'est dangereux.


Je dirais que le message qui montrerait la trace de la pile est faux. Les gens qui n’aiment pas les exceptions vérifiées ne le pensent-ils pas ?


Donc, si vous n'aimez pas les exceptions vérifiées, pouvez-vous expliquer pourquoi et veuillez répondre à la question sans réponse.


Je ne cherche pas de conseils sur le moment d'utiliser l'un ou l'autre modèle, je cherche pourquoi les gens s'étendent de RuntimeException mais pas d'Exception, et/ou la raison pour laquelle ils renvoient RuntimeException après avoir intercepté l'exception au lieu d'ajouter des lancers à la méthode. J'aimerais comprendre les motivations des gens pour ne pas aimer les exceptions vérifiées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal