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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 07:17:02828parcourir

Why Do Some Developers Oppose Checked Exceptions in Java?

Objection à l'exception vérifiée

Pendant des années, je n'ai pas pu obtenir de réponse décente à la question : Pourquoi certains développeurs sont-ils si opposés à vérifié anormalement ? J'ai eu plusieurs conversations, lu des articles de blog et lu le point de vue de Bruce Eckel (c'est la première personne que j'ai jamais vue s'exprimer contre cela).

J'écris actuellement du nouveau code et je fais très attention à la façon dont je gère les exceptions. 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 sans réponse... Laissez-moi configurer ceci :

De manière générale (par la conception de Java),

  • Erreur pour des choses qui ne devraient jamais être détectées (la VM est allergique aux cacahuètes et quelqu'un a versé un pot de cacahuètes dessus)
  • RuntimeException Utilisé pour les choses que le programmeur a mal faites (le programmeur a quitté la fin du tableau)
  • Exception (sauf RuntimeException) utilisé pour les choses sur lesquelles le programmeur n'a aucun contrôle (le disque est plein lors de l'écriture dans le système de fichiers, le handle de fichier du processus Limite atteinte, plus aucun fichier ne peut être ouvert)
  • Throwable est simplement la classe parent de tous les types d'exceptions.

Une affirmation que j'entends souvent est que si une exception se produit, tout ce que le développeur peut 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.

En ce qui concerne l'argument "Je viens d'arrêter", ce que je dis, c'est que même si vous quittez, vous devez afficher un message d'erreur raisonnable. Si vous évitez simplement de gérer les erreurs, vos utilisateurs ne seront pas très contents lorsque le programme se fermera sans indication claire de la raison.

Pour ceux qui "cela rend le refactoring difficile", cela suggère que le niveau d'abstraction approprié n'a pas été choisi. Au lieu de déclarer qu'une méthode lève une IOException, l'IOException doit être convertie en une exception plus appropriée à ce qui se passe.

Je n'ai aucun problème à envelopper Main avec catch(Exception) (ou dans certains cas catch(Throwable) pour garantir que le programme se termine correctement - Mais j'attrape toujours l'exception spécifique que je dois intercepter. Cela me permet au moins d'afficher un message d'erreur approprié

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

>

Si vous lancez plutôt la sous-classe RuntimeException
Exception
sous-classe, alors comment savoir
ce que vous devez attraper ?



Si la réponse est d'attraper Exception, alors vous aussi Cela me semble faux

si vous gérez les exceptions système de la même manière. Throwable, alors vous gérez les exceptions système et les erreurs de VM (et autres) de la même manière. Cela me semble faux

Si la réponse est que vous n'interceptez que les exceptions dont vous savez qu'elles sont levées. des exceptions ont été levées ? Que se passe-t-il lorsque le programmeur X lance une nouvelle exception et oublie de l'attraper ? Cela me semble dangereux

.

Je dirais que le programme affichant 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 répondre à cette question sans réponse ?

Je ne cherche pas de conseils sur l'utilisation de l'un ou l'autre modèle, je cherche les raisons pour lesquelles les gens s'étendent depuis RuntimeException au lieu de depuis Exception, et pourquoi ils attrapent l'exception puis la relancent one Au lieu d’ajouter un lancer RuntimeException à leurs méthodes. J'aimerais comprendre la motivation 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!

Déclaration:
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