Je vois à plusieurs reprises des commentaires sur l'évitement de la lancée générique J'ai une classe qui agrégait un J'ai vérifié les documents Java pour la classe Qu'est-ce qui est considéré comme "la meilleure pratique" ici? P> RunTimeException code> et j'essaie de suivre cette ligne directrice. p>
triédmap code> avec un paramètre de propriété pour autoriser ou interdire les touches en double. J'essaie de comprendre quelle exception je devrais lancer lorsque des clés en double sont interdites et une tentative est faite d'en ajouter une. p>
code> et aucun des descendants directs connus ne semblait approprié. Est-ce que je viens d'aller de l'avant et de créer mon propre
eduplicatemapkey code> classe par exemple et jette ça? Si oui, comment évitez-vous de finir avec une grosse tas de fichiers de classe, une pour chaque exception code> code> type? p>
3 Réponses :
créer votre propre exception. Par exemple, Java Ee a DuplicateKeyException code> A>, vous pouvez faire quelque chose de similaire que pour votre carte personnalisée. P>
Est-ce que je viens d'aller de l'avant et crée ma propre classe Eduplicatemapey, par exemple et jette ça? p> blockQuote>
absolument, oui. N'ayez pas peur de créer de nouvelles types d'exception si cela ressemble à la bonne façon d'y aller. Si ce n'est pas clair pour vous, comme l'auteur, qui est le bon type d'exception à utiliser, il ne sera certainement pas clair pour le programmeur en utilisant votre API. Alors, faites-la explicite et créez votre propre type d'exception. P>
Comment puis-je éviter de finir avec un gros tas de fichiers de classe, une pour chaque type d'exception personnalisé? p> blockQuote>
Les classes d'exception ne sont pas différentes de tout autre type de logique commerciale. Vous ne vous sentez pas empêché de créer autant de types que vous sentez que votre code «normal» (au moins, j'espère que vous ne le faites pas), et vous ne devriez pas ressentir aucune différence en ce qui concerne les types d'exception. Ils sont souvent aussi importants. P>
personnellement em>, IllegalStateException ou IllegalArgumentException ressemble à elle pourrait travailler ici mais je peux voir des arguments contre cela aussi. p>
Les sous-classes de RunTimeException sont décochées. Cela signifie que les déclarations de lancer et essayer / attraper ne sont pas nécessaires. En tant que tels, les sous-classes de RunTimeException sont généralement considérées comme des choses qui ne devraient pas être capables de se produire (erreur logique / programmeur) plutôt que quelque chose de concevable qui devrait être traitée gracieusement (comme une défaillance d'E / S) en raison du manque d'application de la mise en application traiter avec ça. Inversement, il est maladroit qui doit essayer / attraper des choses qui ne devraient pas être logiquement possibles. Donc, au contraire, si vous voulez forcer de traiter avec elle, alors la sous-classe de la sous-classe, mais de la runtimédie.
@Samsvenbjorgchristiensensen: "Les exceptions vérifiées peuvent parfois être utiles si vous écrivez une bibliothèque critique [...] mais dans le développement d'applications générales, les coûts de dépencence l'emportent sur les benifits" Chapitre 7 du Code propre de Martin
Ce que vous avez dit, c'était que étant donné que vous voulez forcer le programmeur à le gérer de manière particulière (c'est-à-dire la capture) i>, utilisez une exception non cochée (sous-classes de RunTimeException). Ceci est matériellement incorrect, pas une question d'opinion ou de style, car il est précisément runtimédia et ses sous-classes qui ne font pas i> forcent l'utilisation d'essayer / attraper. J'apprécie que la citation est probablement bonne conseil, mais cela ne parle pas de la même chose. Je conviens qu'une exception non cochée semble appropriée dans ce cas particulier et il semble qu'il semble raisonnable.
+1 Une autre exception runtimédia qui pourrait être utile dans ce cas est Non pris en charge Autres conseils: Je vais encapsulerai le tri de la carte dans une classe et créerai une méthode pour ajouter quelque chose - sinon, il faudra que on ne devrai retenir de vérifier les doublons partout où quelque chose est placé à l'intérieur de la chaîne de tri (versus simplement la fois à l'intérieur de la classe encapsulant le tri ).
Alternativement étendre la méthode de tri et remplacez la méthode Met Code> - Écrivez votre logique de prévention en double, puis déléguez-vous à la superclasse
Mettez la méthode code>.